线程池是否可以在没有互斥锁的情况下运行在单线程函数上?
类似下面的内容。
void* thread_func( void* p ) {
}
for( int i = 0 ; i < N ; i++ ) }
pthread_create( &t_id, &attr, thread_func, null );
}
或者我应该将每个 pthread_create
传递给它自己的线程函数吗?
线程池是否可以在没有互斥锁的情况下运行在单个线程函数上?
是的,有可能。但这取决于您的 thread_func
函数。如果您正在访问一个共享资源,例如一个计数器并且您没有使用互斥锁,那么您可能会遇到竞争条件:
int counter; // set to 2 in main function
void* thread_func(void *p) {
counter = counter + 1;
}
- 线程 A 从计数器中读取(值:2)
- 线程 B 从计数器中读取(值:2)
- 线程 B 增加计数器(值:3)
- 线程 A 增加计数器(值:3)
发生这种情况是因为线程 A 的计数器值仍然为 2 并添加 1,这导致 3(再次),即使根据正常理解,在两个线程完成增加值后计数器值应该为 4。
如果添加互斥量,线程必须等待当前修改计数器值的另一个线程。
我是一名优秀的程序员,十分优秀!