请考虑以下情形:
要求:
程序序列(伪代码):
流程A(生产者):
int bufferPos = 0;
while( true )
{
if( isBufferEmpty( bufferPos ) )
{
writeData( bufferPos );
setBufferFull( bufferPos );
bufferPos = ( bufferPos + 1 ) % M;
}
}
Run Code Online (Sandbox Code Playgroud)
流程B(消费者):
int bufferPos = 0;
while( true )
{
if( isBufferFull( bufferPos ) )
{
readData( bufferPos );
setBufferEmpty( bufferPos );
bufferPos = ( bufferPos + 1 ) % M;
}
}
Run Code Online (Sandbox Code Playgroud)
现在这个古老的问题:如何有效地同步它们!? …
Windows API提供CreateFileMappingNuma函数(http://msdn.microsoft.com/en-us/library/windows/desktop/aa366539(v=vs.85).aspx)以在特定NUMA上创建命名共享内存空间节点.
到目前为止,我还没有找到Linux的等效功能.
我目前的方法如下:
有谁知道更好的方法?
编辑:为了记录:我提出的实施确实按预期工作!