比如搶票,假設餘票只有1張;隔離級別可以保證事務a和事務b不能讀到對方的資料,也不能更新對方正在更新的資料,但是事務a和事務b都認為還有1張余票,於是出票,並更新為0;
事務解決了併發問題,已經不存在併發問題了;
但是事務b讀取的是過時資料,依據過時資料做了業務處理;
所以需要樂觀鎖或者悲觀鎖,來記錄乙個資訊:當前已經讀取的資料,是不是已經過時了!
事務有這麼幾種實現方式:鎖協議、mvcc、時間戳排序協議、有效性檢查協議,鎖協議是事務的一種實現方式,事務 = 用鎖封裝的乙個函式,可以重用而已,但是這幾個事務的函式覆蓋面太粗粒度了,所以有時候我們還得借助於鎖來進行細粒度控制;
事務不能保證每個操作結果正確,售票時超賣還是會發生。
事務保證整個操作的成乙個組,要麼全做要麼全不做 但是不能保證多個事務同時讀取同乙個資料
資料物件被加上排它鎖時,其他的事務不能對它讀取和修改;加了共享鎖的資料物件可以被其他事務讀取,但不能修改
事務可以用鎖實現,可以保證一致性和隔離性,但是鎖用來保證併發性;
隔離性和併發性有點類似,但是隔離性只是保證不會出現相互讀取中間資料,卻無法解決併發的問題
有了事務為什麼還需要樂觀鎖和悲觀鎖
比如搶票,假設餘票只有1張 隔離級別可以保證事務a和事務b不能讀到對方的資料,也不能更新對方正在更新的資料,但是事務a和事務b都認為還有1張余票,於是出票,並更新為0 事務解決了併發問題,已經不存在併發問題了 但是事務b讀取的是過時資料,依據過時資料做了業務處理 所以需要樂觀鎖或者悲觀鎖,來記錄乙個...
為什麼有了事務還需要樂觀鎖和悲觀鎖?
為什麼有了事務這東西,還需要樂觀鎖悲觀鎖?事務是粗粒度的概念 樂觀鎖悲觀鎖可以更細粒度的控制 比如搶票,假設餘票只有1張 隔離級別可以保證事務a和事務b不能讀到對方的資料,也不能更新對方正在更新的資料,但是事務a和事務b都認為還有1張余票,於是出票,並更新為0 事務解決了併發問題,已經不存在併發問題...
有了互斥量,為什麼還需要條件變數?
一。互斥量和條件變數簡介 互斥量 mutex 從本質上說是一把鎖,在訪問共享資源前對互斥量進行加鎖,在訪問完成後釋放互斥量上的鎖。對互斥量進行加鎖以後,任何其他試圖再次對互斥鎖加鎖的執行緒將會阻塞直到當前執行緒釋放該互斥鎖。如果釋放互斥鎖時有多個執行緒阻塞,所有在該互斥鎖上的阻塞執行緒都會變成可執行...