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動的にメモリを割り当てる場合、スレッドで使用してもスレッドセーフですか? それらは同じミューテックスを参照するのでしょうか、それともスレッドごとにコピーを作成するのでしょうか?mainmutexes[0]

それが基本的な知識であることは知っていますが、いくつかのチュートリアルを読んだ後、混乱しました。

4

1 に答える 1

2

ヒープ メモリはスレッド間で共有されます。これはミューテックスの場合に不可欠です。

pthread_mutex_lockミューテックスを使用して 2 つのスレッドを同期する場合は、同じミューテックス オブジェクトを呼び出す必要があります。

概念的には、mutexは共有リソースですが、ロックはスレッド固有です。同時にロックできるスレッドは 1 つまでであり、ロックはスレッド間で共有されません。反対側の基礎となるミューテックスは共有されます。すべてのスレッドが同じミューテックスを使用して、ロックを取得しても安全かどうかを判断します。

posix では、ロックは実際のオブジェクトによって表されるのではなく、プログラムの状態では暗黙的であることに注意してください。しかし、私はこれがそれらのことを考えるのに役立つ方法だと今でも思っています。

于 2013-11-15T10:20:05.497 に答える