C版本:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <errno.h>
/*信号量*/
sem_t sem;
sem_t sem2;
static void pthread(void);
int main (void)
{
/*线程的标识符*/
pthread_t pt_1 = 0;
int ret = 0;
/*信号量初始化*/
sem_init(&sem,0,1);
sem_init(&sem2,0,0);
/*创建线程*/
ret = pthread_create (&pt_1, NULL, (void *)pthread, NULL);
if (ret != 0)
{
perror ("pthread_create");
}
while(1)
{
sem_wait(&sem2); /*等待信号量*/
printf ("This is main!\n");
sleep (3);
/*临界资源*/
sem_post (&sem); /*释放信号量*/
}
/*等待线程的结束*/
pthread_join (pt_1, NULL);
printf ("main programme exit!\n");
return 0;
}
static void pthread(void)
{
while(1)
{
sem_wait(&sem); /*等待信号量*/
printf ("This is pthread!\n");
sleep (2);
/*临界资源*/
sem_post (&sem2); /*释放信号量*/
}
}
C++版本:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <errno.h>
/*信号量*/
sem_t sem;
sem_t sem2;
void *pthread(void *);
int main (void)
{
/*线程的标识符*/
pthread_t pt_1 = 0;
int ret = 0;
/*信号量初始化*/
sem_init(&sem,0,1);
sem_init(&sem2,0,0);
/*创建线程*/
ret = pthread_create (&pt_1, NULL, pthread, NULL);
if (ret != 0)
{
perror ("pthread_create");
}
while(1)
{
sem_wait(&sem2); /*等待信号量*/
printf ("This is main!\n");
sleep (3);
/*临界资源*/
sem_post (&sem); /*释放信号量*/
}
/*等待线程的结束*/
pthread_join (pt_1, NULL);
printf ("main programme exit!\n");
return 0;
}
void *pthread (void *)
{
while(1)
{
sem_wait(&sem); /*等待信号量*/
printf ("This is pthread!\n");
sleep (2);
/*临界资源*/
sem_post (&sem2); /*释放信号量*/
}
}