Linuxのmutex_lock関数の使い方は?
Linuxでは、ミュテックスロック(mutex lock) の取得にmutex_lock() 関数を使用します。これはコードブロックの中で呼び出し、同一時間に 1 つのスレッドのみが共有リソースにアクセスできるようにします。
mutex_lock()関数は以下のプロトタイプを有する。
int mutex_lock(pthread_mutex_t *mutex);
パラメータmutexはpthread_mutex_t型のmutex変数を指すポインタである。
mutex_lock 関数を実行すると、ミューテックスの取得が試みられ、ミューテックスが(ロックされているスレッドがない)現在使用可能であれば、そのスレッドはミューテックスを取得して、実行を続けます。ミューテックスが現在他のスレッドによってロックされている場合、そのスレッドはブロックされ、ミューテックスを使用可能になるまで待機します。
一度スレッドが排他ロックを取得できたら、他のスレッドがロックを取得して共有リソースにアクセスできるように、共有リソースへのアクセスが必要なくなった段階で排他ロックを確実に解除する必要があります。 排他ロックの解除には、mutex_unlock() 関数を使用します。
以下のサンプルコードは、mutex_lock()関数の使用方法を示す簡単な例です。
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex; // 定义互斥锁
void* thread_function(void* arg) {
pthread_mutex_lock(&mutex); // 获取互斥锁
// 访问共享资源
printf("Thread %d is accessing the shared resource.\n", *(int*)arg);
pthread_mutex_unlock(&mutex); // 释放互斥锁
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
int id1 = 1;
pthread_create(&thread1, NULL, thread_function, &id1); // 创建线程1
int id2 = 2;
pthread_create(&thread2, NULL, thread_function, &id2); // 创建线程2
pthread_join(thread1, NULL); // 等待线程1结束
pthread_join(thread2, NULL); // 等待线程2结束
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
この例では、2 つのスレッドを作成します。どちらのスレッドも thread_function() 関数を実行します。各スレッドは、関数を呼び出す際にミューテックスを取得しようとし、共有リソースにアクセスしてメッセージを出力します。1 つのスレッドがミューテックスを獲得すると、もう 1 つのスレッドはミューテックスが解放されるまでブロックされます。
ミューテックスの初期化と破棄は、pthread_mutex_init()、pthread_mutex_destroy() 関数を使用することに注意してください。