flash 源码网站,网站关键词优化排名怎么做,免费h5模板网站,软件研发项目管理系统/* author: hjjdebug date: 2023年 09月 20日 星期三 09:33:58 CST description: 10辆汽车通过承重5辆汽车的桥,处理一个资源争用问题 * 10个线程代表10辆汽车 * 桥上只能承载5辆汽车, 代表最大只能同时有5辆汽车通过 概要: 让10个线程竞争5个资源,用posix 接口, sem…/* author: hjjdebug date: 2023年 09月 20日 星期三 09:33:58 CST description: 10辆汽车通过承重5辆汽车的桥,处理一个资源争用问题 * 10个线程代表10辆汽车 * 桥上只能承载5辆汽车, 代表最大只能同时有5辆汽车通过 概要: 让10个线程竞争5个资源,用posix 接口, semaphore 来实现 1. sem_init(信号量,num) 初始化资源数 2. 每个线程要 sem_wait(信号量) 申请资源,申请不到会等待 3. 用完要sem_post(信号量), 归还资源 */ #include stdio.h #include stdlib.h #include pthread.h #include semaphore.h #include unistd.h sem_t semPass; #define MAX_THREAD 10 pthread_t gThread[MAX_THREAD]; #define MAX_LOAD 5 void *func(void *arg) { int id *(int *)arg; //保留下参数 //等待信号量的值 sem_wait(semPass); //让10个线程竞争5个资源 printf( car %d passing \n, id); sleep(2); //这里可以用sleep(rand()%51)模拟随即等待1-5秒的时间 printf( car %d finished \n, id); sem_post(semPass); //资源释放 return NULL; } int main() { sem_init(semPass, 0, MAX_LOAD); //初始化资源数(整数) srand(time(NULL)); for(int i0; iMAX_THREAD; i) { //创建线程 pthread_create(gThread[i], NULL, func, i); //创建10个线程 //控制一下节奏,否则i变化太快,func拿不到正确参数i,i又变了. //当然也可以用其它同步手段,例如互斥量等,但usleep 是最简单的了 usleep(1000); } for(int i0; iMAX_THREAD; i) { //等待线程结束 pthread_join(gThread[i],NULL); } return 0; } /* * 运行结果 ./semaphore car 0 passing car 1 passing car 2 passing car 3 passing car 4 passing car 0 finished car 5 passing car 1 finished car 6 passing car 2 finished car 7 passing car 3 finished car 8 passing car 4 finished car 9 passing car 5 finished car 6 finished car 7 finished car 8 finished car 9 finished */