亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1988 | 回復: 6
打印 上一主題 下一主題

[C] 兩個線程實現(xiàn)文件寫入,編譯通過,可是提示段錯誤郁悶 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-10-11 21:30 |只看該作者 |倒序瀏覽
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>

  5. #define BUFFER_SIZE 10

  6. int buffer[BUFFER_SIZE];
  7. int in = 0;
  8. int out = 0;
  9. int nextProduced;
  10. int nextConsumed;
  11.        
  12. void thread_producer(int *);
  13. void thread_consumer(int *,FILE * );

  14. int main(void)
  15. {
  16.         FILE *fout;
  17.         fout = fopen("data.out","w");
  18.         pthread_t producer_id;
  19.         pthread_t consumer_id;
  20.         int ret_p, ret_c;
  21.         ret_p = pthread_create(&producer_id,NULL,(void *) thread_producer,NULL);
  22.         ret_c = pthread_create(&consumer_id,NULL,(void *) thread_consumer,NULL);
  23.         if(ret_p!=0)
  24.         {
  25.                 printf("Create thread_producer failed.\n");
  26.                 exit(1);
  27.         }
  28.         if(ret_c!=0)
  29.         {
  30.                 printf("Create thread_consumer failed.\n");
  31.                 exit(1);
  32.         }
  33.         pthread_join(producer_id,NULL);
  34.         pthread_join(consumer_id,NULL);
  35.         fclose(fout);
  36.         return 0;
  37. }

  38. void thread_producer(int* buffer)
  39. {
  40.         while(1)
  41.         {
  42.                 while(((in+1)%BUFFER_SIZE) == out)/* buffer is full */
  43.                         ;
  44.                 scanf("%d",&nextProduced);
  45.                 buffer[in] = nextProduced;
  46.                 in = (in+1)%BUFFER_SIZE;
  47.         }
  48.         return ;
  49. }

  50. void thread_consumer(int* buffer,FILE *fout)
  51. {
  52.         while(1)
  53.         {
  54.                        /*buffer is empty*/
  55.                 while(in == out)
  56.                         ;
  57.                 nextConsumed = buffer[out];
  58.                 fprintf(fout,"%d\n",nextConsumed);
  59.                 out = (out+1)%BUFFER_SIZE;
  60.         }
  61.         return ;
  62. }
復制代碼
剛開始學操作系統(tǒng),試著寫了點,上來就錯了阿。。誰來幫幫我阿。

論壇徽章:
17
處女座
日期:2013-08-27 09:59:352015亞冠之柏太陽神
日期:2015-07-30 10:16:402015亞冠之薩濟拖拉機
日期:2015-07-29 18:58:182015年亞洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥豬
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56雙子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
2 [報告]
發(fā)表于 2013-10-12 10:11 |只看該作者
回復 1# 373202184


    數(shù)據(jù)對步在哪里?nextConsumed,nextProduced,in,out在兩個線程里同時訪問,而且還同步訪問終端,不進行同步當然問題多多。

論壇徽章:
59
2015年亞洲杯之約旦
日期:2015-01-27 21:27:392015年亞洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵節(jié)徽章
日期:2015-03-06 15:50:392015年亞洲杯之阿聯(lián)酋
日期:2015-03-19 17:39:302015年亞洲杯之中國
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03雙子座
日期:2014-12-10 21:39:16處女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
3 [報告]
發(fā)表于 2013-10-12 11:47 |只看該作者
1. 文件寫和讀, Offset已經(jīng)變了。
2. 要同步。

論壇徽章:
4
白羊座
日期:2013-09-17 21:59:30技術(shù)圖書徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40雙子座
日期:2013-12-17 18:26:39
4 [報告]
發(fā)表于 2013-10-12 12:03 |只看該作者
回復 1# 373202184
全局變量buffer,函數(shù)形參buffer
main局部變量fout,函數(shù)形參fout
pthread_create最后一個參數(shù)都為NULL


   

論壇徽章:
0
5 [報告]
發(fā)表于 2013-10-13 09:48 |只看該作者
兩個線程不是共享主代碼段的數(shù)據(jù)么?Producer 寫如數(shù)據(jù)后才可以讓Consumer讀取然后寫入文件呀。
while(in == out)  /*Buffer 已經(jīng)空了,Consumer一直在等待阿。*/
       ;
回復 2# myworkstation


   

論壇徽章:
0
6
發(fā)表于 2013-10-13 09:50
回復 4# 井蛙夏蟲

額,這樣有什么問題么?


   

論壇徽章:
0
7 [報告]
發(fā)表于 2013-10-13 09:51 |只看該作者
回復 3# folklore
麻煩詳細解釋一下可否


   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP