死鎖 猩猩過谷

2021-07-08 19:45:04 字數 1065 閱讀 4401

題目:乙個主修人類學,輔修電腦科學的學生參加了乙個 課題,調查是否可以教會非洲狒狒理解死鎖.他找到 一處很深的峽谷,在上邊固定了一根橫跨峽谷的繩索, 這樣狒狒就可以攀住繩索越過峽谷.同一時刻,只要 朝著相同的方向就可以有幾隻狒狒通過.但如果向東 和向西的狒狒同時攀在繩索上那麼會產生死鎖(狒狒 會被卡在中間),由於它們無法在繩索上從另乙隻的 背上翻過去.如果乙隻狒狒想越過峽谷,它必須看當 前是否有別的狒狒正在逆向通行.利用訊號量編寫一 個避免死鎖的程式來解決該問題.

解答:#define east 1

#define west 2

#define null 0

typedef int semaphore  

int state = null  // initialize

semaphore mutex = 1;

semaphore eastward = 0;

semaphore westward = 0;

int eastcount = 0;

int westcount = 0;

void crosseastward()

eastcount++;    //記錄要通過的猩猩數量

up(&mutex);

down(&eastward);   //開始過峽谷

cross();

down(&mutex);  //離開峽谷的時候由於有更新所以也得確保互斥訪問

eastcount--;

if( eastcount == 0 )

up(&mutex);

}類似的情況:

void crosswestward()

westcount  ++;    //記錄要通過的猩猩數量

up(&mutex);

down(&westward);   //開始過峽谷

cross();

down(&mutex);  //離開峽谷的時候由於有更新所以也得確保互斥訪問

westcount --;

if( westcount == 0 )

up(&mutex);

}

SQLSERVER 2008 檢視死鎖 儲存過程

use master go object storedprocedure dbo sp who lock script date 07 30 2015 13 52 38 set ansi nulls on goset quoted identifier on goalter procedure db...