48 lines
819 B
C
48 lines
819 B
C
|
#include <stdio.h>
|
||
|
#include <pthread.h>
|
||
|
#include <unistd.h>
|
||
|
#include <semaphore.h>
|
||
|
|
||
|
// 信号量实例
|
||
|
|
||
|
sem_t sem; // 定义信号量
|
||
|
|
||
|
void *printer(void *data)
|
||
|
{
|
||
|
|
||
|
char *msg = (char *)data;
|
||
|
|
||
|
// P 操作
|
||
|
sem_wait(&sem); // 本案例中锁住了控制台
|
||
|
|
||
|
while (*msg)
|
||
|
{
|
||
|
printf("%c", *msg++);
|
||
|
fflush(stdout);
|
||
|
usleep(200 * 1000);
|
||
|
}
|
||
|
|
||
|
// V 操作
|
||
|
sem_post(&sem);
|
||
|
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
int main(int argc, char const **argv)
|
||
|
{
|
||
|
// 信号量初始化
|
||
|
sem_init(&sem, 0, 1);
|
||
|
|
||
|
pthread_t tid1, tid2;
|
||
|
pthread_create(&tid1, NULL, printer, "disen666\n");
|
||
|
pthread_create(&tid2, NULL, printer, "lucy888\n");
|
||
|
|
||
|
pthread_join(tid1, NULL);
|
||
|
pthread_join(tid2, NULL);
|
||
|
printf("\n---over---\n");
|
||
|
|
||
|
// 销毁信号量
|
||
|
sem_destroy(&sem);
|
||
|
|
||
|
return 0;
|
||
|
}
|