![](https://csdnimg.cn/release/download_crawler_static/11153624/bg11.jpg)
25.6 Binary Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
25.6.1 Static binary semaphore initialization . . . . . . . . . . . . . . . . . . . . 470
25.6.2 Run-time binary semaphore initialization . . . . . . . . . . . . . . . . . . 471
25.6.3 Wait for a binary semaphore . . . . . . . . . . . . . . . . . . . . . . . . . 472
25.6.4 Wait for a binary semaphore with timeout in ticks . . . . . . . . . . . . . 473
25.6.5 Tries to wait for a binary semaphore . . . . . . . . . . . . . . . . . . . . 474
25.6.6 Post a binary semaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
25.6.7 Set binary semaphore name . . . . . . . . . . . . . . . . . . . . . . . . . 476
25.6.8 Get binary semaphore name . . . . . . . . . . . . . . . . . . . . . . . . . 477
25.6.9 Binary semaphore destruction . . . . . . . . . . . . . . . . . . . . . . . . 477
25.7 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
26 Multiprocessing Manager 481
26.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
26.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.1 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.2 Global Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.3 Global Object Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.4 Remote Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
26.2.5 Proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
26.2.6 Multiprocessor Configuration Table . . . . . . . . . . . . . . . . . . . . . 485
26.3 Multiprocessor Communications Interface Layer . . . . . . . . . . . . . . . . . . 486
26.3.1 INITIALIZATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
26.3.2 GET_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
26.3.3 RETURN_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
26.3.4 RECEIVE_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
26.3.5 SEND_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
26.3.6 Supporting Heterogeneous Environments . . . . . . . . . . . . . . . . . . 488
26.4 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
26.4.1 Announcing a Packet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
26.5 Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
26.5.1 MULTIPROCESSING_ANNOUNCE - Announce the arrival of a packet . . 492
27 Symmetric Multiprocessing (SMP) 493
27.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
27.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
27.2.1 Application Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 495
27.2.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
27.2.3 Uniprocessor versus SMP Parallelism . . . . . . . . . . . . . . . . . . . . 495
27.2.4 Task Affinity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
27.2.5 Task Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
27.2.6 Clustered Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
27.2.7 OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
27.2.8 Atomic Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
27.3 Application Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
27.3.1 Task variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
27.3.2 Highest Priority Thread Never Walks Alone . . . . . . . . . . . . . . . . . 499
27.3.3 Disabling of Thread Preemption . . . . . . . . . . . . . . . . . . . . . . . 499
27.3.4 Disabling of Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
27.3.5 Interrupt Service Routines Execute in Parallel With Threads . . . . . . . 501
27.3.6 Timers Do Not Stop Immediately . . . . . . . . . . . . . . . . . . . . . . 501
27.3.7 False Sharing of Cache Lines Due to Objects Table . . . . . . . . . . . . . 501
xv