请使用互斥锁 和 信号量分别实现5个线程之间的同步
#define THREAD_COUNT 5
pthread_mutex_t mutex;
int shared_resource = 0;
void *thread_function(void *arg) {
int thread_id = *(int *)arg;
pthread_mutex_lock(&mutex); // 加锁
printf("Thread %d is accessing the shared resource.\n", thread_id);
shared_resource++;
printf("Thread %d updated the shared resource to %d.\n", thread_id, shared_resource);
pthread_mutex_unlock(&mutex); // 解锁
pthread_exit(NULL);
}
int main() {
pthread_t threads[THREAD_COUNT];
int thread_ids[THREAD_COUNT];
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
for (int i = 0; i < THREAD_COUNT; i++) {
thread_ids[i] = i + 1;
pthread_create(&threads[i], NULL, thread_function, &thread_ids[i]);
}
for (int i = 0; i < THREAD_COUNT; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex); // 销毁互斥锁
printf("Final value of shared resource: %d\n", shared_resource);
return 0;
}
#define THREAD_COUNT 5
sem_t semaphore;
int shared_resource = 0;
void *thread_function(void *arg) {
int thread_id = *(int *)arg;
sem_wait(&semaphore); // 等待信号量
printf("Thread %d is accessing the shared resource.\n", thread_id);
shared_resource++;
printf("Thread %d updated the shared resource to %d.\n", thread_id, shared_resource);
sem_post(&semaphore); // 释放信号量
pthread_exit(NULL);
}
int main() {
pthread_t threads[THREAD_COUNT];
int thread_ids[THREAD_COUNT];
sem_init(&semaphore, 0, 1); // 初始化信号量,初始值为 1
for (int i = 0; i < THREAD_COUNT; i++) {
thread_ids[i] = i + 1;
pthread_create(&threads[i], NULL, thread_function, &thread_ids[i]);
}
for (int i = 0; i < THREAD_COUNT; i++) {
pthread_join(threads[i], NULL);
}
sem_destroy(&semaphore); // 销毁信号量
printf("Final value of shared resource: %d\n", shared_resource);
return 0;
}