执行primefaces操作的函数

是否有用于执行C运行时库或任何其他实用程序库支持的primefaces操作(如整数的递增/递减)等function?

如果是,那么使用这些函数可以使所有操作成为primefaces的?

使用这些函数比使用互斥体等常规同步原语更有益吗?

操作系统:Windows,Linux,Solaris和VxWorks

在C11之前

C库没有任何。

在Linux上,gcc提供了一些 – 查找__sync_fetch_and_add__sync_fetch_and_sub等等。

对于Windows,请查找InterlockedIncrementInterlockedDecrement``, InterlockedExchange`等。 如果你在Windows上使用gcc,我猜它也有与Linux上相同的内置函数(尽管我还没有validation过)。

在Solaris上,它取决于它。 大概如果你使用gcc,它可能(再次)拥有与它在Linux下相同的内置函数。 否则,周围有图书馆,但没有真正标准化。

C11

C11添加了(合理)完整的primefaces操作和primefaces类型集。 这些操作包括atomic_fetch_addatomic_fetch_sum (和*_explicit版本相同的东西,它们允许您指定所需的排序模型,默认值始终使用memory_order_seq_cst )。 还有fence函数,例如atomic_thread_fenceatomic_signal_fence

类型对应于每个普通整数类型 – 例如,对应于int8_t和对应于uint_least64_t 。 这些是定义的typedef名称。 为避免与任何现有名称冲突,可以省略标题; 编译器本身使用实现者名称空间中的名称(例如, _Atomic_uint_least32_t而不是atomic_uint_least32_t )。

‘有益’是情境。 总是,表现取决于具体情况。 当你为这样的东西换掉一个互斥体时,你可能会发现一些奇妙的事情,但你可能没有任何好处(如果它不是那种流行的情况)或者让事情变得更糟(如果你意外地创造了’自旋锁’) 。

在所有支持的平台上,您可以使用GLib的primefaces操作 。 在内置primefaces操作的平台上(例如汇编指令),glib将使用它们。 在其他平台上,它将回归到使用互斥锁。

我认为primefaces操作可以提高速度,即使使用它们实现互斥锁也是如此。 使用互斥锁,您将至少有两个primefaces操作(锁定和解锁),以及实际操作。 如果primefaces操作可用,那就是单个操作。

不确定C运行时库的含义。 正确的语言或标准库不提供任何方法来执行此操作。 您需要使用特定于操作系统的库/ API。 此外,不要被sig_atomic_t所欺骗 – 它们不是乍一看似乎只在信号处理程序的上下文中有用。

在Windows上,有InterlockedExchange等。 对于Linux,你可以使用glibc的primefaces宏 – 它们是可移植的(参见i486 atomic.h )。 我不知道其他操作系统的解决方案。

通常,您可以在x86上使用xchg指令进行primefaces操作(也适用于双核CPU)。

至于你的第二个问题,不,我不认为使用primefaces操作会比使用互斥锁更快。 例如,pthreads库已经实现了具有primefaces操作的互斥体,这非常快。