关于独木桥问题中的一些经验总结

发布时间 2023-10-30 08:24:38作者: yuan_f

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就没有出现这种情况

其实就是一些小细节,但是容易忽视,难以找到关键所在。
最后,有错请指正。