인사말 !!mutex를 사용하지 않고 double var를 보호하십시오.
나는 POSIX 멀티 스레딩 응용 프로그램, 스레드 1에 , 나는 이런 식으로 글로벌 VAR 설정 리눅스에서 실행되는 교류 AP했습니다 : thread2에서
Pthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
Data1[idx].doubleval = idx * 100.0 * anothervar ;
}//for
Pthread_mutex_unlock(&Mutex1);
을,이 방법으로 글로벌 var에 그것을 얻을 : 데이터 1을 thread1 설정되어있는 경우 지금
Pthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
doublexxx = Data1[idx].doubleval ;
DoSomething(doublexxx) ;
}//for
Pthread_mutex_unlock(&Mutex1);
, 내 AP에 뮤텍스를 사용하지 않는 가정 [33] .doubleval thread2는 데이터 1을 읽는 동안 [33] .doubleval, 윌 데이터 1 [33]. doubleval은 매우 이상한 값입니까? 예를 들어 double var에는 4 바이트가 있고 thread1은 Data1 [33] .doubleval 첫 번째 2 바이트를 설정하고 나중에 2 바이트를 마칩니다. thread2가 Data1 [33] .doubleval ...을 읽으려고합니다. 가능하니?
이런 종류의 문제없이 이중 var를 보호하려면 어떻게해야합니까? 뮤텍스를 사용하는 것이 좋습니다, 나는 double var를 보호하는 또 다른 방법이 있는지 궁금합니다 thread1이 쓰고 있습니다. 적어도 thread2는 동일한 var에서 읽으려고합니다. 4 바이트를 두 번 기다리십시오 !!!
뮤텍스를 사용하면 걱정할 필요가 없습니다. 불필요하게 문제를 일으키지 않는 이유는 무엇입니까? –
심각하게; 잠그고 싶지 않으면 스레드를 사용하지 않아야합니다. – tbert
고마워요, 내 응용 프로그램이 너무 많은 스레드를 사용하고, 가능한 한 빨리 실행하고 싶습니다, 어떻게 mutex_lock 효과 성능, 실제로 모든 뮤텍스 작은 메모리 strcpy 블록에서 사용되는,하지만 난 여전히 그것은 더 빨리 달립니다 ... 친절하게 모든 답장을 보내 주셔서 감사합니다 !! – barfatchen