1
#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]吗?他们是要引用相同的互斥体还是为每个线程创建一个副本?

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

4

1 回答 1

2

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

如果要使用互斥锁同步两个线程,它们必须调用pthread_mutex_lock一个互斥锁对象。

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

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

于 2013-11-15T10:20:05.497 回答