gpt4 book ai didi

c++ - 使用互斥量时出错

转载 作者:IT王子 更新时间:2023-10-29 00:13:21 25 4
gpt4 key购买 nike

当我尝试制作一个以字符串为键、pthread_mutex_t 为元素的映射时,

    map<string, pthread_mutex_t> connectedClientsMutexes;

pthread_mutex_t myMutex;//= PTHREAD_MUTEX_INITIALIZER;
connectedClientsMutexes.insert(pair<string,pthread_mutex_t>(userName,myMutex));
while (1)
{

pthread_mutex_lock(&connectedClientsMutexes[userName]);
// do something here
}

这会产生:

phase3: pthread_mutex_lock.c:312: __pthread_mutex_lock_full: Assertion `(-(e)) != 3 || !robust' failed.

最佳答案

复制互斥锁是未定义的。尝试在映射中放置一个指向互斥量的指针。

编辑 这就是未定义行为的本质。有时您很幸运(或看起来很幸运),有时则不然。

您不是在映射中复制多个互斥锁,而是将多个指针指向互斥锁。所以像这样:

map<string, pthread_mutex_t *> connectedClientsMutexes;

connectedClientsMutexes.insert(pair<string,pthread_mutex_t *>(userName, &myMutex));

pthread_mutex_lock(connectedClientsMutexes[userName]);

大概您正在将映射传递给各个线程,因此最好不要在堆栈上分配这些互斥锁,除非您确定它们不会超出范围。将它们声明为全局变量或动态分配它们并使用 pthread_mutex_init() 初始化它们。

关于c++ - 使用互斥量时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8627438/

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