Linux多线程编程之线程互斥锁

来源:互联网 发布:网络没问题起凡打不开 编辑:程序博客网 时间:2024/05/20 18:49
#include <stdio.h>#include <pthread.h>#include <semaphore.h>#include <stdlib.h>//Linux多线程编程之线程互斥锁//保证共享数据操作的完整性。/*互斥锁:线程将互斥。互斥锁变量//初始化互斥锁int  pthread_mutex_init(pthread_mutex_t  *mutex, const pthread_mutex‐       attr_t *mutexattr);参数1:互斥锁变量,默认快速互斥锁 PTHREAD_MUTEX_INITIALIZER;参数2:互斥锁属性 一般NULL//加锁:阻塞函数int pthread_mutex_lock(pthread_mutex_t *mutex);//非阻塞加锁:int pthread_mutex_trylock(pthread_mutex_t *mutex);//解锁int pthread_mutex_unlock(pthread_mutex_t *mutex);//销毁互斥锁int pthread_mutex_destroy(pthread_mutex_t *mutex);*/static  int val =100;//快速互斥锁:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//读线程执行函数void *pthread_read(void *arg){    printf("pthrea 1 run...\n");    int i =2;    while(1){        //加锁        pthread_mutex_lock(&mutex);        printf("thread read val  =%d\n",val);        if(val ==105){            pthread_mutex_unlock(&mutex);            break;        }        //解锁        pthread_mutex_unlock(&mutex);        sleep(2);    }    pthread_exit(NULL);    return NULL;}//写线程执行函数void  *pthread_write(void *arg){    printf("pthread write run..\n");    while(1){        //加锁        pthread_mutex_lock(&mutex);        val++;        printf("pthread write val =%d\n",val);        if(val ==105){            printf("write exit\n");            pthread_mutex_unlock(&mutex);            break;        }        //解锁        pthread_mutex_unlock(&mutex);        sleep(1);    }    pthread_exit(NULL);    return NULL;}int main(void){    printf("main thread tid = 0x%x\n",pthread_self());    //初始化互斥锁    pthread_mutex_init(&mutex,NULL);    //创建写线程    pthread_t tid2;    pthread_create(&tid2,NULL,pthread_write,NULL);    //创建读线程      pthread_t tid1;    pthread_create(&tid1,NULL,pthread_read,NULL);    //阻塞等待子线程结束,回收子线程结束8kb物理内存    pthread_join(tid1,NULL);    pthread_join(tid2,NULL);    printf("child pthread exit\n");//  sleep(8);    printf("main pthread exit\n");    pthread_exit(NULL);  //结束主线程        return 0;}/*$ ./a.outmain thread tid = 0xb758c6c0pthrea 1 run...thread read val  =100pthread write run..pthread write val =101pthread write val =102thread read val  =102pthread write val =103pthread write val =104thread read val  =104pthread write val =105write exitthread read val  =105child pthread exitmain pthread exit*/
原创粉丝点击