#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
int tickets=50;
pthread_mutex_t mutex;
void *TicketGrabbing(void *arg)
{
const char *name=(char*)arg;
while(1)
{
pthread_mutex_lock(&mutex);
//票大于0,才可以抢
if(tickets>0)
{
usleep(1000); //usleep()微秒级别
printf("[%s] get a ticket : %d\n",name,tickets--); // 抢到票打印出来
pthread_mutex_unlock(&mutex);
}
else
{
pthread_mutex_unlock(&mutex);
break;
}
}
printf("%s quit!\n",name);
pthread_exit((void*)0);
}
int main()
{
pthread_t t1,t2,t3,t4;
pthread_mutex_init(&mutex,NULL);
// &t1:线程id;NULL:为默认属性;TicketGrabbing,回调函数,即想让线程执行什么逻辑
// "thread 1",给回调函数指定的参i数
pthread_create(&t1,NULL,TicketGrabbing, "thread 1");
pthread_create(&t2,NULL,TicketGrabbing, "thread 2");
pthread_create(&t3,NULL,TicketGrabbing, "thread 3");
pthread_create(&t4,NULL,TicketGrabbing, "thread 4");
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_join(t3,NULL);
pthread_join(t4,NULL);
pthread_mutex_destroy(&mutex);
}
linux线程+锁例程
最新推荐文章于 2024-07-16 23:19:20 发布