bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

unix互斥鎖與信號量應用例子



  1. #include<pthread.h> 
  2. #include<semaphore.h> 
  3. #include<stdlib.h> 
  4. #include<stdio.h> 
  5. #include<string.h> 
  6. #include<unistd.h> 
  7.  
  8. #define SIZE 3 
  9. #define STR_SIZE 20 
  10.  
  11. pthread_mutex_t mutex; //全局變量對main 及 線程函數都可見
  12. sem_t read_sem, write_sem; //全局變量對main 及 線程函數都可見
  13.  
  14. struct _buf_ 
  15.     char* buf[SIZE]; 
  16.     int front, rear; 
  17. }buffer; //循環隊列結構體
  18.  
  19. void thread(void) 
  20.     while(1) 
  21.     { 
  22.         if(0 != sem_wait(&read_sem)) 
  23.         { 
  24.             perror("sem_wait_0"); 
  25.             exit(1); 
  26.         } 
  27.      
  28.         if(0 != pthread_mutex_lock(&mutex)) 
  29.         { 
  30.             perror("pthread_mutex_lock_0"); 
  31.             exit(1); 
  32.         } 
  33.      
  34.         fputs("output characters:\n",stdout); 
  35.      
  36.         fputs(buffer.buf[buffer.front],stdout); 
  37.      
  38.         buffer.front = (buffer.front + 1) % SIZE; 
  39.      
  40.         if(0 != pthread_mutex_unlock(&mutex)) 
  41.         { 
  42.             perror("pthread_mutex_lock_0"); 
  43.             exit(1); 
  44.         } 
  45.         if(0 != sem_post(&write_sem)) 
  46.         { 
  47.             perror("sem_wait_0"); 
  48.             exit(1); 
  49.         } 
  50.      
  51.         sleep(10); 
  52.     } 
  53.      
  54.  
  55. int main(void) 
  56.     //初始化循環隊列結構體 
  57.     int i; 
  58.     bufferbuffer.front = buffer.rear = 0; 
  59.     for(i=0; i < SIZE; i++) 
  60.     { 
  61.         buffer.buf[i] =(char*) malloc(STR_SIZE); 
  62.     } 
  63.     //初始化 互斥鎖 
  64.     //存在警告 pthread_mutexattr_t mutex_attr = PTHREAD_MUTEX_INITIALIZER; 
  65.      
  66.     if(0 != pthread_mutex_init(&mutex, NULL)) 
  67.     { 
  68.         perror("pthread_mutex_init\n"); 
  69.         exit(1); 
  70.     } 
  71.      
  72.     //初始化信號量 
  73.      
  74.     if(0 != sem_init(&read_sem, 0, 0))//linux進程間的信號共享還未能實現,參數PSHARE為0,而且還沒有進行寫操作沒有數據可讀,將參數vaule設置為0,進行阻塞 
  75.     { 
  76.         perror("sem_init_0\n"); 
  77.         exit(1); 
  78.     } 
  79.      
  80.     if(0 != sem_init(&write_sem, 0, 2)) 
  81.     { 
  82.         perror("sem_init_1\n"); 
  83.         exit(1); 
  84.     } 
  85.     //創建兩個子線程 
  86.     pthread_t thd0,thd1; 
  87.      
  88.     if(0 != pthread_create(&thd0,NULL,(void*)thread,NULL)) 
  89.     { 
  90.         perror("pthread_create_0\n"); 
  91.         exit(1); 
  92.     } 
  93.      
  94.     if(0 != pthread_create(&thd1,NULL,(void*)thread,NULL)) 
  95.     { 
  96.         perror("pthread_create_1\n"); 
  97.         exit(1); 
  98.     } 
  99.      
  100.     //進行寫入字符操作 
  101.     while(1) 
  102.     { 
  103.         //寫信號量阻塞 
  104.         if(0 != sem_wait(&write_sem)) 
  105.         { 
  106.             perror("sem_wait_1"); 
  107.             exit(1); 
  108.         } 
  109.         //上互斥鎖所進行寫入操作 
  110.         if(0 != pthread_mutex_lock(&mutex)) 
  111.         { 
  112.             perror("pthread_mutex_lock_1"); 
  113.             exit(1); 
  114.         } 
  115.          
  116.         fputs("pls enter 20 character:\n",stdout); 
  117.          
  118.         //讀標準輸入文件 
  119.         if(NULL == fgets(buffer.buf[buffer.rear],STR_SIZE,stdin)) 
  120.         { 
  121.             perror("fgets\n"); 
  122.             exit(1); 
  123.         } 
  124.          
  125.         if(0 == strncmp("end\n",buffer.buf[buffer.rear],3)) 
  126.         { 
  127.             printf("manual exit successfully\n"); 
  128.             exit(1); 
  129.         } 
  130.          
  131.         buffer.rear = (buffer.rear+1)% SIZE; 
  132.         //解互斥鎖 
  133.         if(0 != pthread_mutex_unlock(&mutex)) 
  134.         { 
  135.             perror("pthread_mutex_lock_1"); 
  136.             exit(1); 
  137.         } 
  138.          
  139.         if(0 != sem_post(&read_sem)) 
  140.         { 
  141.             perror("sem_wait_1"); 
  142.             exit(1); 
  143.         } 
  144.          
  145.         sleep(1); 
  146.      
  147.     } 
  148.      
  149.      
  150.  
  151.     return 0; 

 

網站建設哪家好,找創新互聯公司!專注于網頁設計、網站建設、微信開發、微信小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了儀隴免費建站歡迎大家使用!

附件:http://down.51cto.com/data/2362161

網頁標題:unix互斥鎖與信號量應用例子
新聞來源:http://vcdvsql.cn/article22/pepgcc.html

成都網站建設公司_創新互聯,為您提供定制開發外貿網站建設網站導航網站建設網站設計域名注冊

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站