gpt4 book ai didi

c++ - 在不使用 pthread_join 的情况下等待 pthread_create 完成

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:21 31 4
gpt4 key购买 nike

我想在不使用 pthread_join 的情况下暂停一个线程,直到另一个线程完成初始化。我尝试使用连接,但由于我们拥有的一些异步线程间通信系统,它会导致死锁。现在,我正在使用(自定义)锁来实现这一点。

在线程 1 中:

lock_OfflineWorker.Lock()
if (pthread_create(&tid0, NULL, RunOfflineWorker, NULL) != 0)
{
}

lock_OfflineWorker.TryLock();
lock_OfflineWorker.Unlock();

在线程 2 中:

bool OfflineWorker::Initialize()
{
lock_OfflineWorker.Unlock();
}

但这是不雅的,我不太确定副作用(另一个僵局的可能性)。这个可以吗?如果没有,是否有另一种方法来实现这一点(使用锁或其他方式)

编辑:忘记包含“RunOfflineWorker”函数

void* RunOfflineWorker(void* pData)
{
g_OfflineWorker.Initialize();
}

最佳答案

您可以使用 pthread 条件等待作业达到所需状态。

线程 1 使用 pthread_cond_wait() 等待,线程 2 使用 pthread_cond_signal() 向它发出信号。

你需要:

bool            condition ; // or anything else to be tested
pthread_mutex_t mutex ;
pthread_cond_t cond ;

第一个线程初始化所有:

condition = false ;
pthread_mutex_init( &mutex , PTHREAD_MUTEX_INITIALIZER );
pthread_cond_init( &cond , PTHREAD_COND_INITIALIZER );

然后它等待互斥量被锁定。通常您将等待置于循环中以检查条件。

pthread_mutex_lock( &mutex );
while( ! condition )
{
pthread_cond_wait( &cond , &mutex );
}
pthread_mutex_unlock( &mutex );

其他线程在适当的时候执行此操作:

pthread_mutex_lock( &mutex );
condition = true ; // or false ...
pthread_cond_signal( &cond );
pthread_mutex_unlock( &mutex );

关于c++ - 在不使用 pthread_join 的情况下等待 pthread_create 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/729721/

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