2014-03-27 175 views
0

我試圖編寫多線程應用程序,它將通過結構共享一些參數。這裏是代碼的相關部分。C多線程應用程序結構

typedef struct { 
    .... 
    char xml_file[1024]; 
    .... 
} GeneratorData; 

在主線程(功能)

GeneratorData generator_data; 
ConnectionData connection_data; 

bzero(&connection_data, sizeof(connection_data)); 
bzero(&generator_data, sizeof(generator_data)); 

strcpy(generator_data->xml_file, argv[1]); 
strcpy(connection->xml_file, argv[1]); 

if(pthread_create(&generate, NULL, (void*)Generator__Init, (void *)&generator_data) < 0){ 
     return -1; 
} 

if(pthread_create(&connection, NULL, (void*)Connection__Connect, (void *)&connection_data) < 0){ 
     return -1; 
} 
pthread_join(generate, NULL); 

的問題是,在Generator__Init功能XML_FILE的,有時(多經常)含量不,我設置了進去。

函數Generator_ 初始化一切正常,直到連接 _Connect函數啓動。這裏會有什麼問題?進入線程連接我沒有從結構生成器獲取變量。

感謝您的建議

+3

如果你的線程操縱結構,同步訪問可能會導致奇怪的數據 – Taiki

回答

0

您的數據在踏步之間共享。所以如果一個人正在操縱數據,它正在改變另一個人看得見的東西。你將不得不更多地瞭解線程編程,特別是POSIX線程。

另外:

  • bzero被廢棄了,因爲很長,使用memset
  • ,如果你需要蒙上了你肯定做錯了你的線程功能。這些應該是具有正確原型的函數指針,而不是數據指針。
  • 讓您的程序在沒有強制轉換的情況下編譯並打開所有警告級別。編譯器是你的朋友。
+0

如果數據是共享的,我不確定。我將輸入參數的字符串副本寫入結構體中,不要在線程之間共享這些結構體(沒有從生成器線程到連接結構體的任何指針,以其他方式相同)。 解決演員並沒有解決我的問題。 – user2336793