
แสดงให้เห็น
1. คิวข้อความเป็นคิวที่จัดเก็บไว้ในหน่วยความจำ
2. เนื่องจากมีเพียงกระบวนการเดียวเท่านั้นที่สามารถเข้าถึงข้อมูลในคิวข้อความ จึงไม่จำเป็นต้องล็อกหรือเซมาฟอร์เพิ่มเติม
ตัวอย่าง
echo "ความคืบหน้าของผู้ปกครอง pid:{$parentPid}n";$childList = array();
//สร้างคิวข้อความและกำหนดประเภทข้อความ (คล้ายกับไลบรารีในฐานข้อมูล)
$id = ftok(__FILE__,'m');
$msgQueue = msg_get_queue($id);
const MSG_TYPE = 1;
// ฟังก์ชั่นผู้ผลิต โปรดิวเซอร์ () {
$msgQueue ทั่วโลก;
$pid = posix_getpid();
$repeatNum = 5;
สำหรับ ( $i = 1; $i <= $repeatNum; $i++) {
$str = "({$pid})ความคืบหน้าในการสร้าง! {$i}";
msg_send($msgQueue,MSG_TYPE,$str);
$แรนด์ = แรนด์(1,3);
นอนหลับ($แรนด์);
-
-
//ฟังก์ชันผู้บริโภค Consumer(){
$msgQueue ทั่วโลก;
$pid = posix_getpid();
$repeatNum = 6;
สำหรับ ( $i = 1; $i <= $repeatNum; $i++) {
$rel = msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$ข้อความ);
echo "{$message} | Consumer({$pid}) ทำลาย n";
$แรนด์ = แรนด์(1,3);
นอนหลับ($แรนด์);
-
-
ฟังก์ชั่น createProgress($ โทรกลับ) {
$pid = pcntl_fork();
ถ้า ( $pid == -1) {
//การสร้างล้มเหลว exit("ข้อผิดพลาดความคืบหน้าของส้อม!n");
} อื่นถ้า ($pid == 0) {
// โปรแกรมประมวลผลย่อย $pid = posix_getpid();
$โทรกลับ();
exit("({$pid})ความคืบหน้าลูกสิ้นสุด!n");
}อื่น{
// กระบวนการหลักดำเนินการโปรแกรมส่งคืน $pid;
-
-
// 3 กระบวนการเขียนสำหรับ ($i = 0; $i < 3; $i ++ ) {
$pid = createProgress('ผู้ผลิต');
$รายการเด็ก[$pid] = 1;
echo "สร้างความคืบหน้าลูกของผู้ผลิต: {$pid} n";
-
// 2 กระบวนการเขียนสำหรับ ($i = 0; $i < 2; $i ++ ) {
$pid = createProgress('ผู้บริโภค');
$รายการเด็ก[$pid] = 1;
echo "สร้างความคืบหน้าของผู้บริโภค: {$pid} n";
-
// รอให้กระบวนการย่อยทั้งหมดสิ้นสุดในขณะที่(!empty($childList)){
$childPid = pcntl_wait($สถานะ);
ถ้า ($childPid > 0){
unset($childList[$childPid]);
-
-
echo "({$parentPid})ความคืบหน้าหลักสิ้นสุด!n";ข้างต้นนี้เป็นการแนะนำคิวข้อความ PHP ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน