我正在使用 C++ 和 pthread,我需要找出创建 pthread 的顺序,我需要一个唯一的整数来告诉我首先创建哪个 pthread,第二个等等。
我的第一个想法是使用pthread_self()
,尽管这个函数返回一个唯一的 id,它几乎是一个巨大的随机数。
我的第二个想法是传递我在循环中的 create 方法中使用的计数器:
pthread_t pthreads[pthreadsNum];
for(int i = 0; i < pthreadsNum; i++){
if (pthread_create(&pthreads[i], NULL, process, (void *)&i) != 0){
cerr << "Error in pthread creation" << endl;
return PTHREAD_CREATION_FAILED;
}
}
但是,这也不起作用。在我的函数中,process
我尝试打印i
计数器的值,但我感到困惑。显然,计数器在一些 pthread 接收它和混乱规则时得到更新:
void *process(void* arg_ptr)
{
int i = *((int*)arg_ptr);
cout << i << endl;
//rest of code
}
给我随机输出:3 3 4 3 以及这个相同随机输出的其他组合。
总之,我有以下问题:
1 - 我做错了什么?
2 - 如何安全有效地通过柜台?
3 - 是否有另一种解决方案来获取创建 pthread 的顺序?
在此先感谢您的帮助:S