1,linux:ipcs
查看系統共享內存,信號量,隊列
[root@iZ286nxqlncZ workerman]# ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 0 root 600 1
0x00000000 32769 root 600 1
0x000c1152 65538 root 666 3
------ Message Queues --------
key msqid owner perms used-bytes messages
2,PHP處理共享內存和信號量
兩模塊--enable-shmop --enable-sysvsem
$shm_id = shmop_open(0xff3, "c", 0644, 100);
shmop_delete($id);
int shmop_write (int shmid, string data, int offset)
string shmop_read (int shmid, int start, int count)
多線程操做的互斥機制
實現互斥機制的最簡單辦法就是使用信號燈。一旦你成功的擁有了一個信號量,你對它所能作的只有2種:請求、釋放。當你執行釋放操做時, 系統將把該信號值減一。若是小於0那就還設爲0。而當你執行請求操做時,系統將把該信號值加一,若是該值大於設定的最大值那麼系統將掛起你的處理進程直到其餘進程釋放到小於最大值爲止。通常狀況下最大值設爲1,這樣一來當一個進程得到請求時其餘後面的進程只能等待它退出互斥區後釋放信號量才能進入該互斥區並同時設爲獨佔方式。這樣的信號量常稱爲雙態信號量。固然,若是初值是任意一個正數就代表有多少個共享資源單位可供共享應用。
int sem_get (int key [, int max_acquire [, int perm]])
int sem_acquire (int sem_identifier)獲取
int sem_release (int sem_identifier)釋放
下面是一段很簡單的互斥操做規程。
$semid=sem_get(0xee3,1,0666);
$shm_id = shmop_open(0xff3, "c", 0644, 100);
sem_acquire($semid); //申請
/* 進入臨界區*/
這裏,對共享內存進行處理
sem_release($semid); //釋放
linux