线程池可以在单个线程函数上运行吗?

时间:2017-08-02 13:21:39

标签: c pthreads

线程池是否可以在没有互斥锁的情况下在单个线程函数上运行?

如下所示。

void* thread_func( void* p ) {
}

for( int i = 0 ; i < N ; i++ ) }
    pthread_create( &t_id, &attr, thread_func, null );
}

或者我应该通过每个pthread_create它自己的线程函数吗?

1 个答案:

答案 0 :(得分:2)

线程池是否可以在没有互斥锁的情况下在单个线程函数上运行?

是的,可能。但这取决于您的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。

如果添加互斥锁,则线程必须等待另一个当前修改计数器值的线程。