#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int count=0;
void *print_count(void *thread_name) {
pthread_mutex_lock(&mutex);
int i;
for(i=0; i<5; i++){
count = count + 1;
sleep(1);
printf("==>%s -> %d\n", thread_name, count);
}
pthread_mutex_unlock(&mutex);
}
main() {
pthread_t thread1;
pthread_t thread2;
char *message1 = "Thread 1";
char *message2 = "Thread 2";
int iret1, iret2;
iret1 = pthread_create(&thread1, NULL, print_count, (void *)message1);
iret2 = pthread_create(&thread2, NULL, print_count, (void *)message2);
pthread_join( thread1, NULL);
pthread_join( thread2, NULL);
exit(0);
}
main()프로세스에서 발생시킨 thread1, thread2는 포인터 함수 print_count()함수를
동시에 사용하고 있다. 하지만 thread1에서 print_count()함수를 사용할 동안에
thread2의 간섭을 배제하기 위해서 pthread_mutex_lock()함수를 사용하고 있다.
thread1에서 print_count()함수를 사용하고 있는동안 thread2는 대기 상태에서
print_count()함수의 pthread_mutex_unlock()함수가 호출 될 때까지 대기한다.
JAVA에서 synchronized사용법과 약간 비슷한거 같다.
'Network' 카테고리의 다른 글
IP 주소와 MAC 주소 둘 다 사용하는 이유 (0) | 2008.12.25 |
---|---|
네트워크 소켓 프로그래밍 FAQ (0) | 2008.08.22 |
KT, 와이브로 기술 이용한 모바일 USN 개발 (0) | 2008.07.22 |
smart dust ( 스마트 더스트) (0) | 2008.07.21 |
OFDM (orthogonal frequency division multiplexing) (0) | 2008.07.10 |