线程锁实例2---读写加锁实例

xiaoxiao2021-02-28  117

#include <stdio.h> #include <pthread.h> #include <unistd.h> struct student { int a ; int b ; int c ; int d ; int e ; int f ; }; char stu[6] = {10,10,10,10,10,10}; //初始化一个线程mutex锁 主要用途是防止资源访问竞争 pthread_mutex_t Mutex = PTHREAD_MUTEX_INITIALIZER ; int write_stu(int value , const char *name); void read_stu(void); void *do_thread(void *arg); int main(void) { pthread_t tid ; // struct student stu = {10,20}; int ret ; ret = pthread_create(&tid , NULL , do_thread , (void *)100); // ret = pthread_create(&tid , NULL , do_thread , (void *)(&stu)); if(ret < 0) { perror("create thread fail"); return -1 ; } ret = pthread_detach(tid); sleep(2); write_stu(80 , "main thread"); return 0 ; } void *do_thread(void *arg) { //写数据函数 //写数据的时候加把锁,为了防止读和写同时进行 write_stu(50 , "thread"); //读数据函数 read_stu(); } int write_stu(int value , const char *name) { //总共操作时间用6秒 int i ; //给一个线程上锁 //上锁,这时候只写 pthread_mutex_lock(&Mutex); for(i = 0 ; i < 6 ; i++) { stu[i] = value ; printf("%s write value:%d \n" , name , value); sleep(1); } //写完了,解锁 pthread_mutex_unlock(&Mutex); } //读数据 void read_stu(void) { int i ; for(i = 0 ; i < 6 ; i++) { printf("stu[%d] : %d \n" , i , stu[i]); } } Engineer-Bruce_Yang 认证博客专家 嵌入式硬件 单片机 arm开发 本科毕业于华南理工大学,现美国卡罗尔工商管理硕士研究生在读,曾就职于世界名企伟易达、联发科技等,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验,现任深圳市云之手科技有限公司副总经理、研发总工程师。
转载请注明原文地址: https://www.6miu.com/read-32927.html

最新回复(0)