gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:18 24 4
gpt4 key购买 nike

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

类似下面的内容。

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。

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

关于线程池可以运行在单线程函数上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com