广州手机网站制作,asp手机网站开发教程,网页制作工具 免费,网站到期时间今日作业#xff1a; 1、有一个隧道#xff0c;全长5公里#xff0c;有2列火车#xff0c;全长200米#xff0c; 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行) 2、有一个隧道#xff0c;全长5公里 1、有一个隧道全长5公里有2列火车全长200米 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行) 2、有一个隧道全长5公里有3列火车全长200米 火车A时速 100公里每小时 火车B时速 50公里每小时 火车c时速 25公里每小时 现在要求 火车A先通过隧道火车B再通过隧道最后火车C通过隧道 火车是线程隧道是临界资源
1、
#include stdio.h
#include string.h
#include stdlib.h
#include math.h
#include fcntl.h
#include unistd.h
#include sys/types.h
#include sys/stat.h
#include dirent.h
#include pthread.h
pthread_mutex_t A;
void* trainA(void *str)
{while(1){pthread_mutex_lock(A);printf(火车A进入\n);sleep(1);printf(火车A驶出\n);pthread_mutex_unlock(A);}
}
void* trainB(void *str)
{while(1){pthread_mutex_lock(A);printf(火车B进入\n);sleep(2);printf(火车B驶出\n);pthread_mutex_unlock(A);}
}
int main(int argc, const char *argv[])
{pthread_mutex_init(A,NULL);pthread_t idA;if(pthread_create(idA,NULL,trainA,NULL) ! 0){perror(pthread_create);return 1;}pthread_t idB;if(pthread_create(idB,NULL,trainB,NULL) ! 0){perror(pthread_create);return 1;}pthread_detach(idB);pthread_detach(idB);while(1);return 0;
}2、
#include stdio.h
#include string.h
#include stdlib.h
#include math.h
#include fcntl.h
#include unistd.h
#include sys/types.h
#include sys/stat.h
#include dirent.h
#include pthread.h
#include semaphore.h
pthread_mutex_t A;
pthread_mutex_t B;
pthread_mutex_t C;
void* trainA(void *str)
{while(1){pthread_mutex_lock(A);printf(火车A进入\n);sleep(0.5);puts(火车A驶出);pthread_mutex_unlock(B);}
}
void* trainB(void *str)
{while(1){pthread_mutex_lock(B);printf(火车B进入\n);sleep(1);puts(火车B驶出);pthread_mutex_unlock(C);}
}
void* trainC(void *str)
{while(1){pthread_mutex_lock(C);printf(火车C进入\n);sleep(2);puts(火车C驶出);pthread_mutex_unlock(A);}
}
int main(int argc, const char *argv[])
{pthread_mutex_init(A,NULL);pthread_mutex_init(B,NULL);pthread_mutex_init(C,NULL);pthread_mutex_lock(B);pthread_mutex_lock(C);pthread_t idA;if(pthread_create(idA,NULL,trainA,NULL) ! 0){perror(pthread_create);return 1;}pthread_detach(idA);pthread_t idB;if(pthread_create(idB,NULL,trainB,NULL) ! 0){perror(pthread_create);return 1;}pthread_detach(idB);pthread_t idC;if(pthread_create(idC,NULL,trainC,NULL) ! 0){perror(pthread_create);return 1;}pthread_detach(idC);while(1);return 0;
}