我有这样的结构:矢量pthread_mutex_t的给我相同的地址的所有互斥
struct thread_items {
pthread_mutex_t mutex;
int i;
thread_items(pthread_mutex_t m, int i): mutex(m), i(i){}
}
我想创建这个结构数组并初始化所有互斥,而我在这。出于某种原因,当我打印互斥地址我得到的所有互斥的同一地址:
vector <thread_items*> thread_items_vec;
for (int i = 0; i < 3; i++)
{
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);
thread_items * items = new thread_items(mutex, i);
thread_items_vec.push_back(items);
cout << "Mutex " << i << " is " << &mutex << endl;
}
这导致与此打印:
Mutex 0 is 0x7fff9580b520
Mutex 1 is 0x7fff9580b520
Mutex 2 is 0x7fff9580b520
我打印,这是因为我的原因并发性有问题,我注意到我没有锁定正确的Mutex。
所以我的问题是我是否正确初始化互斥锁,以便拥有3个不同的互斥锁?我的印刷品是否真的在这里出现问题? 从答案中,我打印始终相同的堆栈指针。这是否意味着我正在初始化我的Mutex的同一个地址?
什么是'thread_items_map'? –
什么是thread_items_map? –
对不起,代码非常复杂,我试着只带上相关的部分。我将编辑我的问题 – Eyzuky