2009年3月9日 星期一

多線程程式設計 - Semaphore

Semaphore比mutex更好用

main.c

#include <stdlib.h>
#include <stdio.h>
#include <semaphore.h>
sem_t sem;
main()
{
int rc;
rc = sem_init(&sem, 1, 1);
if (rc == -1) {
perror("sem_init() failed");
exit(1);
}
int pid = fork();
if (pid==0) /* child */
{
int i;
srand(1234);
for(i=0; i<30; i++)
{
sem_wait(&sem);
sleep(rand()&3);
printf("child: %d\n", i);
sem_post(&sem);
}
}
else /* parent */
{
int i;
srand(54321);
for(i=0; i<30; i++)
{
sem_wait(&sem);
sleep(rand()&3);
printf("parent: %d\n", i);
sem_post(&sem);
}
}
}


執行:
$ gcc -lpthread main

參考資料:
Linux下的Semaphore用法
高手進階必讀:Linux內核的同步機制
Linux Device Drivers學習筆記-Chapter.5
Getting Started With POSIX Threads

沒有留言: