1. 变量定义及初值
int countwest=0;//西向在独木桥上的人数(<=1)
int counteast=0;//东向在独木桥上的人数
sem_t mutex;//锁与桥互斥
sem_t eastmutex;//锁与counteast互斥
sem_init(&mutex, 0, 1);//初始化
sem_init(&eastmutex, 0, 1);//初始化
2. 个人思路
3. 问题及解决方法总结
1.需要用数组存放线程id,pthread_t people_id[NUM_THREADS+1];如果没有,导致相当于只创建了一个线程,出错
2.分别用两个for循环完成:pthread_create创建线程,pthread_join将所有线程运行完毕。若是只用了一个线程,会导致不上锁时结果依旧正确(而非缺少sleep(0.1);睡眠状态的原因)
3.在主函数中,我用随机数决定行人西行(a=1)或东行(a=0)时,前几个结果永远都是west!
,而交换一下,西行(a=0)或东行(a=1)时,则前几个结果永远都是east!
。不影响测试,但很奇怪。但改了后的方法2就没有出现这种情况
其实就是一些小细节,但是容易忽视,难以找到关键所在。
最后,有错请指正。