线程之间是否共享指针?

时间:2013-11-15 10:04:21

标签: c multithreading thread-safety pthreads posix

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

pthread_mutex_t *mutexes;

void *thread_work(void *id)
{
    long tid = (long)id;

    while(some_condition)
    {
        pthread_mutex_lock(mutexes[0]);
    }
}

如果我在mutexes函数中动态地为main分配内存,那么在线程中使用mutexes[0]是否安全?他们会引用相同的互斥锁,还是为每个线程创建一个副本?

我知道这是基础知识,但在阅读了一些教程后我感到困惑。

1 个答案:

答案 0 :(得分:2)

堆内存在线程之间共享,在互斥锁的情况下是至关重要的。

如果要使用互斥锁同步两个线程,则必须在相同的互斥对象上调用pthread_mutex_lock

从概念上讲, mutex 是共享资源,而 lock 是特定于线程的:最多一个线程可以同时拥有锁并且锁不是在线程之间共享。另一方面的底层互斥锁是共享的:所有线程使用相同的互斥锁来确定获取锁是否安全。

请注意,在posix中,锁不是由实际对象表示,而是隐含在程序状态中。但我仍然认为这是思考这些事情的有用方法。