您的位置:首页 > 汽车 > 新车 > 嵌入式学习——进线程(互斥锁和同步)——day26

嵌入式学习——进线程(互斥锁和同步)——day26

2024/11/18 2:33:59 来源:https://blog.csdn.net/qq_47798402/article/details/139244538  浏览:    关键词:嵌入式学习——进线程(互斥锁和同步)——day26

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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com