C 线程池能否在单个线程函数上运行?
线程池是否可以在没有互斥锁的情况下在单个线程函数上运行 类似下面的内容C 线程池能否在单个线程函数上运行?,c,pthreads,C,Pthreads,线程池是否可以在没有互斥锁的情况下在单个线程函数上运行 类似下面的内容 void* thread_func( void* p ) { } for( int i = 0 ; i < N ; i++ ) } pthread_create( &t_id, &attr, thread_func, null ); } void*thread\u func(void*p){ } 对于(int i=0;i
void* thread_func( void* p ) {
}
for( int i = 0 ; i < N ; i++ ) }
pthread_create( &t_id, &attr, thread_func, null );
}
void*thread\u func(void*p){
}
对于(int i=0;i
或者我应该传递每个pthread\u create
它自己的线程函数吗?线程池可以在没有互斥锁的单线程函数上运行吗
是的,这是可能的。但这取决于线程函数
函数。如果您正在访问共享资源,例如计数器,但不使用互斥锁,则可能会遇到争用情况:
- 线程A从计数器读取(值:2)
- 线程B从计数器读取(值:2)
- 线程B增加计数器(值:3)
- 线程A增加计数器(值:3)
线程函数
函数。如果您正在访问共享资源,例如计数器,但不使用互斥锁,则可能会遇到争用情况:
- 线程A从计数器读取(值:2)
- 线程B从计数器读取(值:2)
- 线程B增加计数器(值:3)
- 线程A增加计数器(值:3)
如果添加互斥锁,线程必须等待当前修改计数器值的另一个线程。我不确定您的确切意思,但如果您打算在池中的所有线程上运行相同的函数,这取决于您是否正在访问共享资源。G计数器或类似工具。@marcusshep请不要对随机短语使用代码格式,只对代码和变量/函数名使用。您可以对多个线程使用同一线程函数。如果您正在访问正在修改的共享数据,那么您可能需要一个互斥锁。@interjay响应得很好!事实上,在多个线程中并发运行同一个线程函数是很常见的,但这与是否需要互斥或其他同步辅助无关。即使在不同线程中调用的函数之间没有重叠,您也需要通过互斥或类似方式保护对共享数据的访问。我不确定您的确切意思,但如果您打算在池中的所有线程上运行相同的函数,这取决于您是否正在访问共享资源。G计数器或类似工具。@marcusshep请不要对随机短语使用代码格式,只对代码和变量/函数名使用。您可以对多个线程使用同一线程函数。如果您正在访问正在修改的共享数据,那么您可能需要一个互斥锁。@interjay响应得很好!事实上,在多个线程中并发运行同一个线程函数是很常见的,但这与是否需要互斥或其他同步辅助无关。即使在不同线程中调用的函数之间没有重叠,也需要通过互斥或类似方式保护对共享数据的访问。
int counter; // set to 2 in main function
void* thread_func(void *p) {
counter = counter + 1;
}