- 论坛徽章:
- 0
|
接受批评,把代码放上来:
- #ifndef __QUEUE__H
- #define __QUEUE__H
- u_long queue_create(void);
- void queue_destroy(u_long q_id);
- int getqueue_status(u_long q_id, struct eph_context ** context);
- int putqueue_status(u_long q_id, struct eph_context * context);
- #endif /* __QUEUE__H */
复制代码
简单的说,就是我做了一个队列,ABCD线程调用getqueue_status函数阻塞住。E线程调用putqueue_status给队列里放一个东西,然后发出信号灯让ABCD中的一个线程返回,但是奇怪的是,在我的程序中,我竟然发现,有时候线程进去队列里取数据的时候,竟然执行到了 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;
};
开始以为是信号灯惊群效应,后来我就A线程getqueue_status,B线程putqueue_status,还是一样出现那个问题 |
|