반응형


아래는 std::mutex를 이용한 C++ 동기화 예제 코드이다.

C 방식으로 동기화하는 것은 아래쪽에 pthread_mutex 예제를 참고하세요.


C++11 기준.

+std::mutex

#include <mutex>
#include <thread>
std::mutex mtx ;

void ThreadFunc(int nID, int &nVal) {
mtx.lock() ;
동기화 블록
mtx.unlock() ;
}

int main() {
int nVal=0 ;
std::thread th1(ThreadFunc, 0, std::ref(nVal)) ;
std::thread th2(ThreadFunc, 1, std::ref(nVal)) ;
th1.join() ;
th2.join() ;
return 0 ;
}




+ linux C mutex

#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

pthread_mutex_t mutex = PTHREAD_COND_INITIALIZER ;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER ;

int pthread_mutex_lock(pthread_mutex_t *mutex) ;
     다른 thread에서 mutex_lock을 해제할 때 까지 블록된다.
int pthread_mutex_unlock(pthread_mutex_t *mutex) ;
     mutex lock을 돌려준다.

int pthread_cond_signal(pthread_cond_t *cond) ;
     조건변수cond로 시그널을 보낸다. cond에서 wait하고 있는 쓰레드를 깨움.
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) ;
     조건변수 cond 시그널을 기다림. 블록.


ex)


void ThreadA(void *arg) {
pthread_mutex_lock(&mutexa) ;
to do
pthread_mutex_unlock(&mutexa) ;
}

pthread_t threada ;
int thra ;
int status ;
thra = pthread_create( &threada, NULL, ThreadA, (void*)NULL) ;
pthread_join(threada, (void**) &status) ;

gcc .. -lpthread




'Develop > C&CPP' 카테고리의 다른 글

Vector 3  (0) 2018.05.23
Vector 2  (0) 2018.05.18
Vector 1  (0) 2018.05.16
정규식으로 스트링 일부 추출하기  (0) 2018.03.10
gdb로 디버깅하기  (0) 2018.03.06

+ Recent posts