这似乎是一个基本问题,但请忍受。
我需要开发一个多线程程序,其中有许多线程等待主线程分配工作(类似于生产者使用者线程)。我有条件变量来提醒线程停止等待并开始工作,然后返回等待状态。我在条件变量上有一个互斥锁,该变量将被锁定并在主线程的控制下。我在辅助线程上调用函数def()。
主线程
int def(int y)
{
// Signal the worker threads to stop waiting and start working
pthread_cond_signal(&condvar);
pthread_mutex_lock(&mutex);
pthread_cond_wait(&condvar1, &mutex);
pthread_mutex_unlock(&mutex);
fprintf(stderr, "\nInside the thread");
return 0;
}
int init()
{
// Initialize the thread condition variables
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&condvar, NULL);
pthread_cond_init(&condvar1, NULL);
int x=0;
if(pthread_create(&mythread, NULL, abc, &x)) {
fprintf(stderr, "Error creating thread\n");
}
return 0;
}
我的问题是该程序对时间敏感,并且锁定指令需要几千纳秒的时间。
我的问题是,我可以在不使用互斥锁的情况下与线程进行交互并使它们等待吗?我有独立的工作线程,这些线程不访问彼此的数据。主线程和工作线程互相传递数据。
正确的解决方法是什么?
答案 0 :(得分:0)
使用互斥锁的原因:
条件变量必须始终与互斥锁关联,以避免争用条件,即一个线程准备等待条件变量而另一个线程恰好在第一个线程实际等待该条件之前就发出了竞争条件。
您应该在pthread_cond_signal之前和pthread_cond_wait之前使用它。
我想您不需要条件变量。