問候!!不使用互斥體保護雙var
我有AC AP在Linux上運行這是一個多線程POSIX應用, 在線程1,我設置這樣的全局變量:
Pthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
Data1[idx].doubleval = idx * 100.0 * anothervar ;
}//for
Pthread_mutex_unlock(&Mutex1);
在線程2
,我得到這樣的全局變量它:
Pthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
doublexxx = Data1[idx].doubleval ;
DoSomething(doublexxx) ;
}//for
Pthread_mutex_unlock(&Mutex1);
現在,假設我不希望在我的AP使用互斥,這在線程正在設置數據1 [33] .doubleval同時線程2正在讀取數據1 [33] .doubleval,將數據1 [33]。 doubleval是一個非常奇怪的值?我的意思是,例如,double var有4個字節,而thread1正在設置Data1 [33] .doubleval前2個字節,而不是後面2個字節,在這個組件中 thread2試圖讀取Data1 [33] .doubleval ... 。可能嗎 ?
如果可能的話,我該怎麼做才能在沒有這種問題的情況下保護double var? 互斥是很好用,我只是想知道是否有另一種方式來保護雙線var 其中thread1正在寫入,至少thread2嘗試讀取相同的變量 將等待4個字節雙var完成!
只需使用互斥鎖,你不必擔心它。爲什麼不想要不必要地創建問題? – 2012-02-21 05:20:16
認真;如果你不想鎖定,那麼你不應該使用線程。 – tbert 2012-02-21 06:40:05
謝謝,我的應用程序使用了太多的線程,並且我想盡可能快地運行,我不知道mutex_lock如何影響性能,實際上所有互斥量都用在一個小內存strcpy塊中,但我仍然被告知要使它運行得更快....感謝所有善意的答覆! – barfatchen 2012-02-21 09:20:27