반응형
아래는 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 |