1. 两个线程进行售票处理,售票一百张
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>pthread_mutex_t mutex;
int tick =100;void * th(void* arg)
{while(1){pthread_mutex_lock(&mutex);if(tick>0){printf("%s tick:%d\n", (char*)arg,tick-- );pthread_mutex_unlock(&mutex);usleep(1000*100);}else {pthread_mutex_unlock(&mutex);break;}}return NULL;
}
int main(int argc, char *argv[])
{pthread_t tid1,tid2;pthread_mutex_init(&mutex,NULL);pthread_create(&tid1,NULL,th,"WIN1");pthread_create(&tid2,NULL,th,"WIN2");pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_mutex_destroy(&mutex);return 0;
}
2. 对资源的获取和释放
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
sem_t sem_MEM;
int mem[3]={0};
int get_mem()
{sem_wait(&sem_MEM);int i = 0 ;for(i = 0 ;i<3;i++){if(0 == mem[i]){mem[i] = 1;break;}}return i;
}
void relese_mem(int id)
{mem[id] = 0 ;sem_post(&sem_MEM);
}
void* th(void* arg)
{int id = get_mem();printf("get mem ,tid:%lu ,mem:%d\n" ,pthread_self(),id);sleep(rand()%5 +1);printf("relese mem,tid:%lu mem:%d\n",pthread_self(),id);relese_mem(id);return NULL;}
int main(int argc, char *argv[])
{int i = 0 ;pthread_t tid[10]={0};sem_init(&sem_MEM,0,3);for(i = 0 ;i<10;i++){pthread_create(&tid[i],NULL,th,NULL);}for(i=0;i<10;i++){pthread_join(tid[i],NULL);}sem_destroy(&sem_MEM);return 0;
}