考虑以下情况: 要求: 英特尔x64服务器(多个CPUsockets=> NUMA) Ubuntu 12,GCC 4.6 两个进程通过(命名)共享内存共享大量数据 古典生产者 – 消费者情景 内存被安排在一个循环缓冲区(有M个元素) 程序序列(伪代码): 过程A(制作人): int bufferPos = 0; while( true ) { if( isBufferEmpty( bufferPos ) ) { writeData( bufferPos ); setBufferFull( bufferPos ); bufferPos = ( bufferPos + 1 ) % M; } } stream程B(消费者): int bufferPos = 0; while( true ) { if( […]
下面的代码会导致在.NET上使用C#发生死锁吗? class MyClass { private object lockObj = new object(); public void Foo() { lock(lockObj) { Bar(); } } public void Bar() { lock(lockObj) { // Do something } } }
我正在实现基于此algorithm的无锁队列,该algorithm使用计数器来解决ABA问题。 但是我不知道如何用c ++ 11 CAS来实现这个计数器。 例如,从algorithm: E9: if CAS(&tail.ptr->next, next, <node, next.count+1>) 这是一个primefaces操作,意思是如果tail.ptr->next等于next ,则让tail.ptr->next指向node , 同时(primefaces地)使next.count+1 。 但是,使用C ++ 11 CAS,我只能实现: std::atomic_compare_exchange_weak(&tail.ptr->next, next, node); 不能使next.count+1同时发生。