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 线程函数来实现并发控制。注意,这个示例仅用于演示目的,实际应用中可能需要更复杂的错误处理和资源管理。