release

release()函数用于释放线程锁(解锁)。

release()

”`javascript function consumer(productionQuantity, dict, pLock, cLock) { for (var i = 0; i < productionQuantity; i++) { pLock.acquire() cLock.acquire() var arr = dict.get(“array”) var count = arr.shift() dict.set(“array”, arr) Log(“consumer:”, count, “, array:”, arr) cLock.release() Sleep(1000) pLock.release() } }

function producer(productionQuantity, dict, pLock, cLock) { for (var i = 0; i < productionQuantity; i++) { cLock.acquire() // cLock.acquire() 放在 pLock.acquire() 后不会产生死锁 pLock.acquire() var arr = dict.get(“array”) arr.push(i) dict.set(“array”, arr) Log(“producer:”, i, “, array:”, arr) pLock.release() Sleep(1000) cLock.release() } }

function main() { var dict = threading.Dict() dict.set(“array”, []) var pLock = threading.Lock() var cLock = threading.Lock() var productionQuantity = 10 var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock) var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)

consumerThread.join()
producerThread.join()

}“` 测试死锁场景

需要注意,线程锁使用不当可能导致死锁。

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}