线程池是否可以在没有互斥锁的情况下在单个线程函数上运行?
如下所示。
void* thread_func( void* p ) {
}
for( int i = 0 ; i < N ; i++ ) }
pthread_create( &t_id, &attr, thread_func, null );
}
或者我应该通过每个pthread_create
它自己的线程函数吗?
答案 0 :(得分:2)
线程池是否可以在没有互斥锁的情况下在单个线程函数上运行?
是的,可能。但这取决于您的thread_func
功能。如果您正在访问共享资源,例如计数器而您没有使用互斥锁,那么您可能会遇到竞争条件:
int counter; // set to 2 in main function
void* thread_func(void *p) {
counter = counter + 1;
}
这是因为线程A对于计数器仍然具有值2并且添加1导致3(再次),即使从正常理解,在两个线程完成增加值之后计数器值应该是4。
如果添加互斥锁,则线程必须等待另一个当前修改计数器值的线程。