当前位置: 首页 > news >正文

宁波哪里做网站的什么是wap网站

宁波哪里做网站的,什么是wap网站,小企业网站建设的基础知识,wordpress跳转到微信支付哲学家就餐问题 问题信号量实现发生死锁版限制人数版规定取筷顺序 条件变量实现 问题 在一个圆桌上坐着五位哲学家#xff0c;每个哲学家面前有一个碗装有米饭的碗和一个筷子。哲学家的生活包括思考和进餐两个活动。当一个哲学家思考时#xff0c;他不需要任何资源。当他饿了… 哲学家就餐问题 问题信号量实现发生死锁版限制人数版规定取筷顺序 条件变量实现 问题 在一个圆桌上坐着五位哲学家每个哲学家面前有一个碗装有米饭的碗和一个筷子。哲学家的生活包括思考和进餐两个活动。当一个哲学家思考时他不需要任何资源。当他饿了时他试图拿起两只相邻的筷子来吃饭。由于碗和筷子不能被共享因此必须找到一种方法来确保哲学家能够安全地进餐即不会发生死锁所有哲学家都在等待筷子也不会发生饥饿某些哲学家永远无法拿起筷子 信号量实现 发生死锁版 #include pthread.h #include semaphore.h #include vector #include unistd.h #include iostream#define N 5 #define P(x) sem_wait(x) #define V(x) sem_post(x)sem_t mutex_table; std::vectorsem_t mutex_chopsticks(N);void* T_philosopher(void* arg) {int id *((int*)arg);// id哲学家吃饭需要的2根筷子int lhs (id N - 1) % N;int rhs id % N;while (true) {P(mutex_chopsticks[lhs]);printf( %d by T%d\n, lhs, id);P(mutex_chopsticks[rhs]);printf( %d by T%d\n, rhs, id);// Eat.// Philosophers are allowed to eat in parallel.printf(- %d by T%d\n, lhs, id);printf(- %d by T%d\n, rhs, id);V(mutex_chopsticks[lhs]);V(mutex_chopsticks[rhs]);sleep(0.5);} }int main() {for (int i 0; i N; i) {sem_init(mutex_chopsticks[i], 0, 1);}std::vectorpthread_t threads(N);std::vectorint ids(N);for (int i 0; i N; i) {ids[i] i 1;pthread_create(threads[i], nullptr, T_philosopher, ids[i]);}for (int i 0; i N; i) {pthread_join(threads[i], nullptr);} }限制人数版 限制最多只能4人同时上桌, 则可以保证至少有一个人可以同时拿起两根筷子 #include pthread.h #include semaphore.h #include vector #include unistd.h #include iostream#define P(x) sem_wait(x) #define V(x) sem_post(x)const int N 5;sem_t mutex_table; std::vectorsem_t mutex_chopsticks(N);void* T_philosopher(void* arg) {int id *((int*)arg);// id哲学家吃饭需要的2根筷子int lhs (id N - 1) % N;int rhs id % N;while (true) {// Come to mutex_tableP(mutex_table);P(mutex_chopsticks[lhs]);printf( %d by T%d\n, lhs, id);P(mutex_chopsticks[rhs]);printf( %d by T%d\n, rhs, id);// Eating// Philosophers are allowed to eat in parallel.printf(- %d by T%d\n, lhs, id);printf(- %d by T%d\n, rhs, id);V(mutex_chopsticks[lhs]);V(mutex_chopsticks[rhs]);// Leave mutex_tableV(mutex_table);// Thinkingsleep(0.5);} }int main() {// 保证任何实际最多只有4个人在桌子上// 这样至少有1个人可以拿到2根筷子sem_init(mutex_table, 0, N - 1);for (int i 0; i N; i) {sem_init(mutex_chopsticks[i], 0, 1);}std::vectorpthread_t threads(N);std::vectorint ids(N);for (int i 0; i N; i) {ids[i] i 1;pthread_create(threads[i], nullptr, T_philosopher, ids[i]);}for (int i 0; i N; i) {pthread_join(threads[i], nullptr);} }规定取筷顺序 规定每个人, 先拿编号小的筷子, 再拿编号大的筷子 #include pthread.h #include semaphore.h #include vector #include unistd.h #include iostream#define P(x) sem_wait(x) #define V(x) sem_post(x)const int N 5;sem_t mutex_table; std::vectorsem_t mutex_chopsticks(N);void* T_philosopher(void* arg) {int id *((int*)arg);// id哲学家吃饭需要的2根筷子int lhs (id N - 1) % N;int rhs id % N;while (true) {// 规定每个人, 先拿编号小的筷子, 再拿编号大的筷子if (lhs rhs) {P(mutex_chopsticks[lhs]);P(mutex_chopsticks[rhs]);} else {P(mutex_chopsticks[rhs]);P(mutex_chopsticks[lhs]);}printf( %d by T%d\n, lhs, id);printf( %d by T%d\n, rhs, id);// Eatingprintf(- %d by T%d\n, lhs, id);printf(- %d by T%d\n, rhs, id);V(mutex_chopsticks[lhs]);V(mutex_chopsticks[rhs]);// Thinkingsleep(0.5);} }int main() {for (int i 0; i N; i) {sem_init(mutex_chopsticks[i], 0, 1);}std::vectorpthread_t threads(N);std::vectorint ids(N);for (int i 0; i N; i) {ids[i] i 1;pthread_create(threads[i], nullptr, T_philosopher, ids[i]);}for (int i 0; i N; i) {pthread_join(threads[i], nullptr);} } 条件变量实现 #include pthread.h #include vector #include unistd.h #include iostream#define Lock(x) pthread_mutex_lock(x) #define UnLock(x) pthread_mutex_unlock(x)const int N 5;pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond PTHREAD_COND_INITIALIZER; std::vectorint available(N, true);void* T_philosopher(void* arg) {int id *((int*)arg);// id哲学家吃饭需要的2根筷子int lhs (id N - 1) % N;int rhs id % N;while (true) {// Come to mutex_tableLock(mutex);while (!(available[lhs] available[rhs])) {pthread_cond_wait(cond, mutex);}printf( %d by T%d\n, lhs, id);printf( %d by T%d\n, rhs, id);available[lhs] available[rhs] false;UnLock(mutex);// Eatingsleep(0.5);printf(- %d by T%d\n, lhs, id);printf(- %d by T%d\n, rhs, id);available[lhs] available[rhs] true;pthread_cond_broadcast(cond);// Thinkingsleep(0.5);} }int main() {std::vectorpthread_t threads(N);std::vectorint ids(N);for (int i 0; i N; i) {ids[i] i 1;pthread_create(threads[i], nullptr, T_philosopher, ids[i]);}for (int i 0; i N; i) {pthread_join(threads[i], nullptr);} }
http://www.hkea.cn/news/14292757/

相关文章:

  • 自己做的网站网页错位做网站都有跳转链接
  • 怎样建设自己的视频网站首页微信公众号怎么做文章排版
  • 深圳盐田住房和建设局网站wordpress显示图片慢
  • 个人网站备案幕布站长统计app网站
  • js 网站测速国内十大软件培训机构
  • 如何分析一个网站的用户哪些网站自己做宣传
  • 桐乡 网站建设青海公路建设市场信用信息服务网站
  • 有什么好的建站公司推广链接点击器网页
  • 公司网站可以做服务器吗建站之星网站登录
  • 搜狐快站怎么样thinkphp5做网站
  • 免费数据网站做网站需要下什么软件
  • 建设地方性综合门户网站大致多少钱?要多大的流量?中山精品网站建设流程
  • 设计网站建设书南昌如何用python制作网页
  • 徐州做网站门户网站建设工作总结
  • 西安做网站服务北京网站建设推
  • 企业网站建设效益分析柯桥网站建设
  • 做的网站如何全屏代码广东网站建设商家
  • 现代建设公司网站江苏建设厅网站电话多少
  • wordpress相关网站做招聘网站如何宣传
  • 怎么更换网站的域名茌平网站建设价格
  • 网站建站主机网站开通微信支付接口开发
  • 正规网站建设模板怎么找有赞做网站
  • 上海建设工程造价网站wordpress wplms
  • 旅游网站设计与建设论文把wordpress改成返利网
  • 漳州博大网站建设wordpress百万数据库
  • 恩阳建设局网站镇江网站设计建设
  • 免费建站模板北京微信网站开发报价
  • 宁波企业制作网站营销型网站制作多少钱
  • 甘肃建设厅官方网站seo网站诊断报告
  • 免费地图制作网站怎样自己申请注册公司