#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
sem_t sem;
void func1(void* arg)
{
sem_wait(&sem);
int *running=arg;
printf("thread running1\n");
printf("%d\n",*running);
}
void func2(void* arg)
{
printf("pthread2 running\n");
sem_post(&sem);
}
int main()
{
sem_init(&sem,0,0);
pthread_t thread[2];
int a=5;
pthread_create(&(thread[0]),NULL,(void*)func1,(void*)&a);
printf("main thread running\n");
sleep(10);
pthread_create(&(thread[1]),NULL,(void*)func2,(void*)&a);
printf("main thread running2\n");
pthread_join(thread[0],NULL);
pthread_join(thread[1],NULL);
sem_destroy(&sem);
return 0;
}
#include <stdio.h>
#include <semaphore.h>
#include <sys/time.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
char tem[10]; //读写公共区
sem_t sem;
void* thread_fun(void*);
int main()
{
int counter=0;
pthread_t mythread;
sem_init(&sem,0,0);
pthread_create(&mythread,NULL,thread_fun,NULL);
while(counter<10) //往读写区里写10次'f'
{
tem[counter]='f';
counter++;
sem_post(&sem);
sleep(2);
}
pthread_join(mythread,NULL); //等待子线程
sem_destroy(&sem);
exit(0);
}
void* thread_fun(void* arg) //子线程函数
{
int counter=0;
while(counter<10&&sem_wait(&sem)==0)
{
printf("%c\n",tem[counter]); //读出来显示
counter++;
//sem_wait(&sem);
}
pthread_exit(NULL);
}