我尝试了一个实验,我构建了一个简单的生产者/消费者程序。它们在不同的线程中运行。生产者生成一些数据,消费者在另一个线程中获取它。我实现的消息传递延迟约为 100 纳秒。谁能告诉我这是否合理或者那里有明显更快的实现?
我没有使用锁......只是简单的内存计数器。我的实验在这里描述:
http://tradexoft.wordpress.com/2012/10/22/how-to-move-data-between-threads-in-100-nanoseconds/
基本上,消费者等待计数器增加,然后调用处理函数。所以真的没有多少代码。我仍然很惊讶它花了 100ns。
消费者看起来像这样:
void operator()()
{
while (true)
{
while (w_cnt==r_cnt) {};
auto rc=process_data(data);
r_cnt++;
if (!rc)
break;
}
}
生产者在有可用数据时简单地增加 w_cnt。
有更快的方法吗?