无法在C中同步我的线程

时间:2016-10-10 08:11:39

标签: c multithreading pthreads mutex

当我尝试同步我的线程时,我遇到了问题。我有下一个代码:

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来解决。有没有人知道如何解决这个问题?谢谢

1 个答案:

答案 0 :(得分:2)

问题的一个可能来源是str实际上不是int变量。你需要做一些转换(在创建线程和获取参数时)。

要创建线程并将整数正确传递给ity,首先需要将值强制转换为intptr_tvoid *大到足以适合整数或指针。然后你应该将它转换为通用指针(即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}}