2013-11-15 3 views
1
#include <pthread.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

pthread_mutex_t *mutexes; 

void *thread_work(void *id) 
{ 
    long tid = (long)id; 

    while(some_condition) 
    { 
     pthread_mutex_lock(mutexes[0]); 
    } 
} 

나는 동적으로 main 기능에, 그것은 스레드 mutexes[0]를 사용하는 것이 안전 스레드 mutexes에 대한 메모리를 할당하는 경우? 그들은 같은 뮤텍스를 참조 할 것인가, 아니면 각 스레드에 대한 사본을 만들까요?포인터가 스레드간에 공유됩니까?

기본 지식은 알고 있지만 자습서를 읽은 후에 혼란스러워합니다.

+1

스레드가 동일한 뮤텍스에 액세스합니다. 힙 메모리는 스레드간에 공유됩니다. 이 답변은 꽤 좋습니다 http://stackoverflow.com/questions/1665419/do-threads-have-a-distinct-heap/1665432#1665432 – Baldrick

+0

공유되지만 스레드 안전해야합니다. https://computing.llnl.gov/tutorials/pthreads/#PassingArguments –

+0

@ Phil_12d3 그건 내 질문에 대답하지 않는다고 생각합니다. 뮤텍스를 매개 변수로 전달하고 싶지 않습니다. 나는 그것들을 전역 변수로 만들고 그것들을 쓰레드에서 참조하기 바란다. 뮤텍스의 색인은 일부 조건에 따라 선택됩니다. – pmichna

답변

2

힙 메모리는 스레드간에 공유되며, 뮤텍스가 중요한 경우 스레드가 공유합니다.

뮤텍스를 사용하여 두 스레드를 동기화하려면 에서 pthread_mutex_lock을 같은 뮤텍스 개체로 호출해야합니다. 잠금 스레드 특정 동안

개념적으로 뮤텍스는 공유 자원이되며, 대부분 하나 개의 스레드에서 동시에 잠금을 가질 수 있고 잠금은 스레드간에 공유되지 않습니다. 다른쪽에있는 기본 뮤텍스는 공유됩니다. 모든 스레드는 동일한 뮤텍스를 사용하여 잠금을 확보하는 것이 안전한지 여부를 결정합니다.

posix에서 잠금은 실제 개체로 표시되지 않지만 프로그램 상태에는 암시 적이라는 점에 유의하십시오. 그러나 나는 아직도 이러한 것들을 생각하는 유용한 방법이라고 생각합니다.

관련 문제