如何在独立的C或C ++实现中理解primefaces?

C11和C ++ 11根据执行线程定义primefaces。 而在托管环境中,很清楚线程是什么,在独立语言实现中它是一个模糊的术语。

  1. 如何在独立实现中正式理解C11和C ++ 11中指定的primefaces,其中所有线程必须在程序内实现? 例如:ISR是一个单独的执行线程吗?
  2. 为什么标准委员会根据线程而不是简单地在代码排序领域定义primefaces?
  3. 除了gcc之外,是否有任何嵌入式编译器已经支持C11 / C ++ 11primefaces?

我对这类问题采取的一些机制(有点手工)方法是,primefaces学保证了三件事:读取和写入不会被上下文切换所撕裂(所以你只能看到实际存储在变量中的值); 缓存被刷新(所以你没有看到过时的值); 并且编译器不能跨primefaces操作移动指令(因此在primefaces访问之前逻辑上发生的操作实际上发生在该访问之前)。 请注意,我试图避免使用“线程”的任何概念,尽管它有点费力。

如果您正在编写自己的线程机制,那么这些属性显然非常重要。 它们与您正在使用的线程机制的细节正交。

对于信号处理程序,当您需要检查信号处理程序中执行的代码中的值以及信号处理程序需要修改程序其余部分所关注的值时,它们会为您提供一个站立位置。

我不确定该标准是否正式解决了ISR(很确定它没有),但从这种机制的角度来看,ISR与不是来自raise的信号没有什么不同。 它只是一个异步函数调用,它占用了从被中断的线程获取的堆栈空间。 这绝对不是一个线索; 它是现有线程上的寄生虫。 因此,对于ISR,我会考虑信号的保证而不是线程的保证。

primefaces论是为了应对竞争条件,所以没有线程他们几乎没有任何意义。 可能发生比赛的唯一其他背景是信号处理程序,C标准提供了无锁的概念。

可以看出,独立环境和托管环境之间没有区别。 线程和primefaces是可选function,如果独立环境支持两者,则必须符合两者的规范。 如果它只支持primefaces,它可以为信号处理程序提供无锁primefaces类型,但其他primefaces类型则无用。