|
这里贴代码看得不好看
到这里看
http://elssann.51.net/queue.h
http://elssann.51.net/queue.c
简单的说,就是我做了一个队列,ABCD线程调用getqueue_status函数阻塞住。E线程调用putqueue_status给队列里放一个东西,然后发出信号灯让A线程返回,但是奇怪的是,在我的程序中,我竟然发现,有时候线程进去队列里取数据的时候,竟然执行到了 getqueue_status函数的这一段,
else
{
*context = NULL;
}
奇怪啊,莫非这就是所谓的信号灯惊群效应?
补充一个结构
struct queue_handle
{
int queue_len;
sem_t queue_sem;
pthread_mutex_t queue_lock;
struct eph_context *context_front;
struct eph_context *context_rear;
}; |
|