OkiBry

Synch debug

Dec 22nd, 2021
1,035
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.63 KB | None | 0 0
  1. # Chạy trong main trước
  2.  
  3. # SvVn:17-30
  4. STable::Create semaphore main - 0
  5. STable: Create in table[0]
  6. STable::Create semaphore sinhvien - 0
  7. STable: Create in table[1]
  8. STable::Create semaphore voinuoc - 0
  9. STable: Create in table[2]
  10.  
  11. # xem thằng này như mở vòi nước
  12. STable::Create semaphore m_vn - 0
  13. STable: Create in table[3]
  14.  
  15. # Thao tác input.txt, output.txt
  16. # Load số lượng test SLTD (4)
  17.  
  18. # main:65 exec gọi sinh vien
  19. # sinhvien:15
  20. STable::Signal("m_vn")
  21. # thao tác trên là mở vòi nước
  22. # sinhvien:21
  23. STable::Wait("sinhvien")
  24.  
  25. # main:74 exec gọi voinuoc
  26. # voinuoc:21
  27. STable::Wait("m_vn")
  28. # thao tác khóa vòi nước
  29. # voinuoc:33
  30. STable::Wait("voinuoc")
  31.  
  32. # copy dòng đầu tiên sang sinhvien.txt (4 2 1)
  33. # main:120
  34. STable::Signal("sinhvien")
  35. # SvVn:123
  36. STable::Wait("main")
  37.  
  38. # Tạo file result.txt, voinuoc.txt
  39. # sinhvien copy từng dung tích trong sinhvien.txt sang voinuoc.txt (4 2 1)
  40. # nếu nhận dc 1 dung tích thì chuyển sang voinuoc
  41.  
  42. # sinhvien:83
  43. STable::Signal("voinuoc")
  44. # sinhvien:85
  45. STable::Wait("sinhvien")
  46.  
  47. # Đọc dung tích trong voinuoc.txt
  48. # so sánh v1 và v2 sau đó chọn vòi
  49. # Cộng v vào vòi được chọn
  50. # kiểm tra flag_done_result thì khóa result.txt
  51. # Cho sinh viên vào hàng đợi để load dung tích của học sinh tiế p theo (Đang ở trong vòng while cấp 2)
  52. # voinuoc:91
  53. STable::Signal("sinhvien")
  54. # về lại đầu vòng for cấp 2
  55. # :)) How, sao ông Chung biết mà đặt wait ở đây
  56. # voinuoc:33
  57. STable::Wait("voinuoc")
  58.  
  59. # Tương tự đoạn code trên từ dòng 32
  60. STable::Signal("voinuoc")
  61. STable::Wait("sinhvien")
  62. STable::Signal("sinhvien")
  63. STable::Wait("voinuoc")
  64.  
  65. # Xử lý sinh viên cuối và gặp kí tự *
  66. STable::Signal("voinuoc")
  67. STable::Wait("sinhvien")
  68. # voinuoc:91
  69. STable::Signal("sinhvien")
  70. # voinuoc: kết thúc vòng lặp cấp 2 về lại đầu vòng lặp cấp 1
  71. # voinuoc:21
  72. STable::Wait("m_vn")
  73. # khóa vòi nước
  74. # sinhvien:108
  75. # xử lý xong 1 dòng thì về main
  76. STable::Signal("main")
  77. # Kết thúc 1 vòng lặp, quay lại đâu tiên
  78. STable::Wait("sinhvien")
  79.  
  80. # main sẽ đọc result.txt và copy vào output.txt
  81.  
  82. # mở vòi nước hoặc có thể hiểu là đưa về trạng thái trước ban đầu trước khi lặp của sinhvien
  83. # main:145
  84. STable::Signal("m_vn")
  85. # Quay về dòng main:85
  86.  
  87. # tương tự
  88. # cũng ko hẳn tương tự, tại có error EOF đâu đó
  89. =================================
  90. # đọc 1 dòng
  91. STable::Wait("voinuoc")
  92. STable::Signal("sinhvien")
  93. STable::Wait("main")
  94. STable::Signal("voinuoc")
  95. STable::Wait("sinhvien")
  96. STable::Signal("sinhvien")
  97. STable::Wait("voinuoc")
  98. STable::Signal("voinuoc")
  99. STable::Wait("sinhvien")
  100. STable::Signal("sinhvien")
  101. STable::Wait("voinuoc")
  102. STable::Signal("voinuoc")
  103. STable::Wait("sinhvien")
  104. STable::Signal("sinhvien")
  105. STable::Wait("voinuoc")
  106. STable::Signal("voinuoc")
  107. STable::Wait("sinhvien")
  108. STable::Signal("sinhvien")
  109.  
  110. // ??? Lỗi EOF
  111. STable::Signal("main")
  112. STable::Wait("sinhvien")
  113. STable::Wait("m_vn")
  114. STable::Signal("m_vn")
  115. STable::Wait("voinuoc")
  116. STable::Signal("sinhvien")
  117. STable::Wait("main")
  118. STable::Signal("main")
  119. STable::Signal("m_vn")
  120. STable::Signal("sinhvien")
  121. STable::Wait("main")
  122. ^C
  123. Cleaning up after signal 2
  124. ===========================================================
  125. PHẦN DƯỚI LÀ OUTPUT KHI KHÔNG BẬT DEBUG
  126. NÓ BÁO EOF VẬY THÔI CHỨ OUTPUT.TXT VẪN ĐÚNG 2 CASE ĐẦU, 2 CASE SAU RỖNG
  127. ===========================================================
  128.  
  129. EOF
  130. EOF
  131. EOF
  132. EOF
  133. EOF
  134.  
  135.  Lan thu: 3
  136. EOF
  137. EOF
  138. EOF
  139. EOF
  140. EOF
  141. EOF
  142.  
  143.  Lan thu: 2
  144. EOF
  145. EOF
  146.  
  147.  Lan thu: 1
  148. Full slot in openTable
  149. ^CEOF
  150. Cleaning up after signal 2
  151. ======================================================================================================================
  152. TỔNG KẾT
  153. do cần tạo các file trung gian dữa tiến trình là để các dữ liệu được dùng chung.
  154.  
  155. File sinh vien để pass từng dung tích thành input cho vòi nước
  156. do làm vậy là vì ko biết có bao nhiêu lượt lấy nước, chỉ biết lây đến lúc EOF
  157. EOF của voinuoc.txt là kí tự *. sinhvien:76 và voinuoc:56
  158. voinuoc có 3 cấp vòng while
  159.     While cấp 3 để convert string -> int
  160.  
  161. ý tưởng của voinuoc là đổ nước vào bình
  162. Thay vì xem ai đanh rảnh thì xem ai có lượng nước được lấy ít hơn tức là đang rảnh.
  163.  
  164. main là khóa truy cập tiến trình SvVn
  165. sinhvien là khóa truy cập tiến trình sinhvien
  166. voinuoc là khóa truy cập tiến trình voinuoc
  167. k_vn là khóa mở cả 2 vòi nước
Advertisement
Add Comment
Please, Sign In to add comment