最近我开始学习Inter进程通信。 为了实现彼得森的算法,我找到了两个代码:
1.#define N 2 2. #define TRUE 1 3. #define FALSE 0 4. int INTERESTED [N] = FALSE 5.转TURN; 6. void Entry_Section(int process) 7. { 8. int其他; 9.其他= 1 - 过程; 10.有兴趣[process] = TRUE; 11. TURN =过程; 12. while(有兴趣的[其他] == TRUE&& TURN =流程) 13.} 14. void Exit_Section(int process) 15. { 16.有兴趣[进程] =错误; 17.}
和
1.do 2. { 3.flag [I] = TRUE; 4.转= j; 5. while(flag [j]&& turn == j); // 危急。 6.section flag [i] = False; //余数7.section 8.} while(True);
所以我想知道哪一个是真的。
我认为第二个是正确的。 因为: (第1代码) 在设置标志值' turn = process'之后发生上下文切换时(进程意味着它指向自己),下一个进程来自enter_regin()函数。这两个值都是[2]'数组将是真的。它之后的while循环(作为陷阱)将是真的,并且进程的非循环可以脱离它。
我只是想知道我是对还是错。