Một quy trình bổ sung sẽ được tạo mỗi lần fork
được gọi.
Trong lần gọi đầu tiên tới fork
, quy trình cha mẹ P tạo quy trình con SP1. Sau ngã ba, quá trình cha mẹ gọi lại fork
lần nữa (bỏ qua if
), tạo quy trình con SP2.
SP1 sau khi gọi số lẻ fork
bên trong if
, tạo SSP1 tiểu phụ. SP1 sau đó sinh ra một chuỗi. SP1 rời khỏi if
. và gọi lại số fork
, tạo SSP2 tiểu phụ.
SSP1 sinh ra một chuỗi. SSP1 rời khỏi if
và gọi số fork
, tạo SSSP tiểu phụ.
Vì vậy, các quy trình được tạo: SP1, SP2, SSP1, SSP2, SSSP = 5 quy trình. Nếu bạn đếm quá trình gốc P, có 6 quy trình.
Chỉ chuỗi chủ đề SP1 và SSP1, do đó, có 2 chuỗi được tạo. Nếu bạn đếm tất cả các chủ đề chính của tất cả các quy trình, có 7 hoặc 8 luồng, tùy thuộc vào việc bạn có đếm quá trình gốc hay không P.
Một minh họa về các quy trình và chuỗi được tạo tương quan với mã.
P
pid t pid; |
pid = fork(); +------SP1
if (pid == 0) { | |
fork(); | +---------------SSP1
thread create(...); | |-SP1's thread |-SSP1's thread
} | | |
fork(); +-SP2 +-SSP2 +-SSSP
| | | | | |
Không có vòng lặp. Đó là "nếu". – QuentinUK
lý do tại sao 8 quy trình? một trong các cuộc gọi 'fork' là trong thử nghiệm nếu. – didierc