我有这个结构:
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&#39; s。
所以我的问题是我是否正确初始化互斥锁以获得3个不同的互斥锁?我的印刷品真的出现了问题吗? 从答案中,我打印的堆栈指针始终是相同的。这是否意味着我正在为同一地址初始化我的Mutex?
答案 0 :(得分:2)
您正在打印堆栈变量mutex
的地址,每次循环可能会在同一地址重新创建