相关疑难解决方法(0)

无锁结构的C++原子操作

我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b

我目前正在汇编中编写它,然后将其链接进去.但是,我想知道是否有办法让编译器自动为我执行此操作?例如,带有'原子级'的环绕代码块,并让它弄清楚如何将代码实现为底层处理器体系结构中的原子指令(或者如果底层arch不支持它,则在编译时生成错误)?

PS我知道gcc有一些内置函数(至少对于CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

c++ atomic lock-free

12
推荐指数
2
解决办法
2万
查看次数

安全地将只读数据传递给新线程

假设我有一个程序初始化一个全局变量供线程使用,如下所示:

int ThreadParameter;

// this function runs from the main thread
void SomeFunction() {
    ThreadParameter = 5;

    StartThread(); // some function to start a thread
    // at this point, ThreadParameter is NEVER modified.
}

// this function is run in a background worker thread created by StartThread();
void WorkerThread() {
    PrintValue(ThreadParameter); // we expect this to print "5"
}
Run Code Online (Sandbox Code Playgroud)

这些问题应适用于可能遇到的任何通用处理器体系结构.我希望解决方案是可移植的 - 不是特定于具有更强内存保证的架构,如x86.

  1. 一般问题:尽管非常普遍,但这在所有处理器架构中是否真的安全?如果不安全,如何安全?
  2. 全局变量不是volatile; 是否可能会在StartThread()通话结束后重新订购并留下我的话?如何解决这个问题?
  3. 假设计算机有两个具有自己的缓存的处理器.主线程在第一个处理器上运行,工作线程在第二个处理器上运行 假设在ThreadParameter程序开始运行之前,包含的内存块已被分页到每个处理器的缓存中SomeFunction(). SomeFunction()5ThreadParameter …

c c++ multithreading thread-safety

11
推荐指数
1
解决办法
437
查看次数

标签 统计

c++ ×2

atomic ×1

c ×1

lock-free ×1

multithreading ×1

thread-safety ×1