【发布时间】:2014-11-25 17:13:29
【问题描述】:
我的问题是我正在使用 rawsocket 传递高速率(大于 50kpps)流量,两个线程,一个是发送(从缓冲区读取),另一个是接收(写入缓冲区)。
我必须使用 while(1) 循环来确保无限循环,并且我不能使用 usleep 从那时起我将丢失数据包(我已经尝试过)......现在 cpu 使用率为 100%,我想我我正在烧我的cpu...
代码如下:
while (1)
{
if (sendIndex == PACKET_COUNT_MAX)
{
sendIndex = 0;
}
else if (ringBuffer[sendIndex].drop == 0)
{if(sendtosocket (ringBuffer, sendIndex, rawout) < 0)
a++;
else
sendIndex++;}
else if (ringBuffer[sendIndex].drop == 1) {
ringBuffer[sendIndex].header.free = 1;
memset (ringBuffer[sendIndex].data, 0, sizeof (ringBuffer[sendIndex].data));
sendIndex++;
}
else
{
a++;
}
//nanosleep((struct timespec[]){{0, 5}}, NULL);
}
提前谢谢!!!!!!! 丽莎
【问题讨论】:
-
发送线程在没有要发送的情况下怎么办?是什么保护
ringBuffer不被并发访问破坏? -
如果只有一个生产者和一个消费者,那么无锁环形缓冲区相当容易。
-
我更担心其他效率低下。没有 condvar 或 semaphore:CPU 轮询循环。有趣的 memset 东西归零缓冲空间,不知道为什么。
标签: c loops while-loop cpu