• 笔记2 linux多线程 读写锁


    //read write lock
    #include<stdio.h>
    #include<unistd.h>
    #include<pthread.h>
    
    struct test
    {
        char a[10];
        char b[10];
        char c[10];
    }yb = {"111","222","33333"};
    
    static int j=0;
    
    pthread_rwlock_t mutex_1;
    
    
    void Print1(struct test *arg)
    {
        pthread_rwlock_rdlock(&mutex_1);
        printf("a=%s,b=%s,c=%s,d=%X,j=%d
    ",arg->a,arg->b,arg->c,pthread_self(),j++);
        sleep(2);
        pthread_rwlock_unlock(&mutex_1);
        pthread_exit((void *)j);
        printf("Never Coming.
    ");
    }
    
    struct test *Print2(struct test *arg)
    {
        pthread_rwlock_wrlock(&mutex_1);
        struct test *p = NULL;
        p = arg;
        memcpy(p->a,"fff",3);
        memcpy(p->b,"ggg",3);
        memcpy(p->c,"ttt",3);
        pthread_rwlock_unlock(&mutex_1);
        pthread_exit((void *)0);
    }
    
    
    int main()
    {
        pthread_t pid1,pid2,pid3,pid4;
        void *set;
    
        pthread_rwlock_init(&mutex_1,NULL);
    
        pthread_create(&pid1,NULL,&Print1,&yb);
        sleep(1);
        pthread_create(&pid2,NULL,&Print2,&yb);
        pthread_create(&pid3,NULL,&Print1,&yb);
        sleep(10);
        pthread_create(&pid4,NULL,&Print1,&yb);
    
        pthread_join(pid1,&set);
        printf("pid1 exit coed %d
    ",(int)set);
        pthread_join(pid2,&set);
        printf("pid2 exit coed %d
    ",(int)set);
        pthread_join(pid3,&set);
        printf("pid3 exit coed %d
    ",(int)set);
        pthread_join(pid4,&set);
        printf("pid4 exit coed %d
    ",(int)set);
    
        pthread_rwlock_destroy(&mutex_1);
        sleep(1);
        return 0;
    }
  • 相关阅读:
    Socket listen 简要分析
    Socket connect 等简要分析
    HIVE函数大全
    元数据管理
    flume
    shell编程
    数据仓库集锦
    数据库知识
    hive sql 转化mapreduce原理
    Hadoop 学习笔记
  • 原文地址:https://www.cnblogs.com/sherlockhomles/p/4838318.html
Copyright © 2020-2023  润新知