pthread_t
是 POSIX 線程庫中表示線程的數據類型
<pthread.h>
頭文件。#include <pthread.h>
void *
類型的參數,并返回一個 void *
類型的值。void *thread_function(void *arg) {
// 在這里編寫你的線程執行代碼
return NULL;
}
pthread_t
類型的變量,用于存儲線程的 ID。pthread_t thread_id;
pthread_create()
函數創建一個新線程。該函數需要三個參數:指向線程 ID 的指針、線程屬性(通常為 NULL
)和線程函數的地址。int result = pthread_create(&thread_id, NULL, thread_function, NULL);
if (result != 0) {
printf("Error creating thread: %d\n", result);
exit(1);
}
pthread_join()
函數。該函數需要兩個參數:線程 ID 和一個指向 void *
類型的指針,用于存儲線程函數的返回值。void *return_value;
int result = pthread_join(thread_id, &return_value);
if (result != 0) {
printf("Error joining thread: %d\n", result);
exit(1);
}
pthread_mutex_t
類型的互斥鎖來保護共享資源。#include <pthread.h>
#include<stdio.h>
#include <stdlib.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int shared_counter = 0;
void *thread_function(void *arg) {
for (int i = 0; i < 100000; i++) {
pthread_mutex_lock(&mutex);
shared_counter++;
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main() {
const int NUM_THREADS = 10;
pthread_t threads[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
int result = pthread_create(&threads[i], NULL, thread_function, NULL);
if (result != 0) {
printf("Error creating thread: %d\n", result);
exit(1);
}
}
for (int i = 0; i < NUM_THREADS; i++) {
void *return_value;
int result = pthread_join(threads[i], &return_value);
if (result != 0) {
printf("Error joining thread: %d\n", result);
exit(1);
}
}
printf("Shared counter: %d\n", shared_counter);
return 0;
}
這個示例展示了如何使用 pthread_t
、互斥鎖和其他 POSIX 線程函數來實現并發控制。注意,這個示例僅用于演示目的,實際應用中可能需要更復雜的錯誤處理和資源管理。