当我尝试同步我的线程时,我遇到了问题。我有下一个代码:
static void* CarProcess(void *str);
int main()
{
thread_t *pthreadsArray;
pthreadsArray = (thread_t*)malloc(sizeof(thread_t) * 10);
for (int i = 0; i < 10; i++)
{
int pthread = mythread_create(&pthreadsArray[i], NULL, CarProcess, i);
}
for (int i = 0; i < 10; i++)
{
mythread_join(pthreadsArray[i], NULL);
}
}
static void* CarProcess(void *str)
{
while(1){
printf("Thread ID: %i\n", str);
}
}
当我执行程序时,我有这个输出:
Thread ID: 0
Thread ID: 0
Thread ID: 0
Thread ID: 0
...
但永远不会出现&#34;线程ID:1&#34;,&#34;线程ID:2&#34;,&#34;线程ID:3&#34; ....或&#34;主题ID:9&#34;。我认为它可以使用Mutex,锁定和解锁Mutex来解决。有没有人知道如何解决这个问题?谢谢
答案 0 :(得分:2)
问题的一个可能来源是str
实际上不是int
变量。你需要做一些转换(在创建线程和获取参数时)。
要创建线程并将整数正确传递给ity,首先需要将值强制转换为intptr_t
,void *
大到足以适合整数或指针。然后你应该将它转换为通用指针(即pthread_create(&pthreadsArray[i], NULL, CarProcess, (void *) (intptr_t) i);
):
static void* CarProcess(void *str)
{
int i = (int) (intptr_t) str;
printf("Thread ID: %i\n", i);
}
然后要获取线程函数内的整数值,你需要进行相反的转换:
{{1}}