我正在编写一个应用程序,该应用程序是无锁队列的实现,将在 linux 上运行并由GCC 3.4.2编译。
该实现基于以下原子操作:
__sync_fetch_and_add
__sync_fetch_and_sub
__sync_bool_compare_and_swap
__sync_val_compare_and_swap**
问题是 GCC 在GCC 4.1之前没有上述内置函数,所以目前我必须自己用汇编语言定义它们。但是我对汇编一无所知,有人能给我上述功能的定义吗?任何帮助将不胜感激。
更多信息:
/// @brief 原子地将 a_count 添加到 a_ptr 指向的变量中 /// @return 之前在内存中的值 __sync_fetch_and_add
/// @brief 原子地从 a_ptr 指向的变量中减去 a_count /// @return 之前在内存中的值 __sync_fetch_and_sub
/// @brief Compare And Swap /// 如果 *a_ptr 的当前值为 a_oldVal,则将 a_newVal 写入 *a_ptr /// @return 如果比较成功并且写入 a_newVal 则返回 true __sync_bool_compare_and_swap
/// @brief Compare And Swap /// 如果 *a_ptr 的当前值为 a_oldVal,则将 a_newVal 写入 *a_ptr /// @return *a_ptr 操作前的内容 __sync_val_compare_and_swap(a_ptr, a_oldVal, a_newVal)