下面是一个基于Linux系统的C程序,利用互斥锁pthread_mutex_t实现对共享内存变量的互斥访问。#include <stdio.h>#include <stdlib.h>#include <pthread.h>int mv = 10; // 共享内存变量pthread_mutex_t mutex; // 互斥锁void* thread_increment(void* arg) { int i; for (i = 0; i < 10; i++) { pthread_mutex_lock(&mutex); // 加锁 mv += 10; // 自加操作 pthread_mutex_unlock(&mutex); // 解锁 } pthread_exit(NULL);}void* thread_decrement(void* arg) { int i; for (i = 0; i < 5; i++) { pthread_mutex_lock(&mutex); // 加锁 mv -= 5; // 自减操作 pthread_mutex_unlock(&mutex); // 解锁 } pthread_exit(NULL);}int main() { pthread_t tid_increment, tid_decrement; pthread_mutex_init(&mutex, NULL); // 初始化互斥锁 pthread_create(&tid_increment, NULL, thread_increment, NULL); // 创建自增线程 pthread_create(&tid_decrement, NULL, thread_decrement, NULL); // 创建自减线程 pthread_join(tid_increment, NULL); // 等待自增线程执行完毕 pthread_join(tid_decrement, NULL); // 等待自减线程执行完毕 pthread_mutex_destroy(&mutex); // 销毁互斥锁 printf("mv = %d\n", mv); // 输出mv的值 return 0;}
以上代码首先定义了一个全局变量mv作为共享内存变量,初始值为10。然后定义了一个互斥锁mutex。接着,实现了两个线程函数thread_increment()和thread_decrement(),分别完成对共享内存变量mv的自加和自减操作。在这两个线程函数中,使用pthread_mutex_lock()函数获取互斥锁,执行临界区代码,然后使用pthread_mutex_unlock()函数释放互斥锁。
在主函数中,首先初始化互斥锁mutex,然后使用pthread_create()函数创建两个线程,分别执行自增和自减操作。然后使用pthread_join()函数等待两个线程执行完毕。最后,使用pthread_mutex_destroy()函数销毁互斥锁并输出共享内存变量mv的值。
希望以上代码能够满足您的需求。如果有任何疑问,请随时提出。
如果回答对你有帮助,请给我一个最佳答案!
|