oracle的鎖是放在塊上的。
-- 當前鎖定的物件:
select *
from v$locked_object;
-- 被死鎖的語句
select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))
-- 鎖型別
select *
from v$lock_type lt
where lt.type = 'tx';
--鎖的資訊
select vl.*,trunc(id1/power(2,16)) usn,
bitand(id1,to_number('ffff','***x'))+0 slot ,
vl.id2 sequence
from v$lock vl
where vl.type = 'tx';
-- 查出當前鎖定資源的事務是那乙個以及session 資訊。
select vs.*
from v$transaction t, v$session vs
where t.addr = vs.taddr
and exists (select 1
from v$lock vl
where vl.type = 'tx'
and trunc(id1 / power(2, 16)) = t.xidusn
and bitand(id1, to_number('ffff', '***x')) + 0 = t.xidslot
and vl.id2 = t.xidsqn);
-- kill session.
alter system kill session '78,14848' ;
-- 誰阻塞了誰
select 'sid:', blk.sid ,',is block sid :',req.sid
from v$lock blk,v$lock req
where blk.type = 'tx'
and blk.block = 1
and blk.type = req.type
and req.request > 0
and blk.id1 = req.id1
and blk.id2 = req.id2 ;
-- 日前等待最多的是那個鎖。
select blk.sid ,count(req.sid)
from v$lock blk,v$lock req
where blk.type = 'tx'
and blk.block = 1
and blk.type = req.type
and req.request > 0
and blk.id1 = req.id1
and blk.id2 = req.id2
group by blk.sid
order by 2;
verilog中的阻塞與非阻塞
初學verilog的同學容易搞混淆阻塞與非阻塞賦值操作。要區分的話,其實也有辦法。學過數位電路的都知道時序的概念,比暫存器的操作,把d端輸入用clk打入暫存器,在clk時鐘上公升沿取樣d值,只有在時鐘上公升沿的下一週期的上公升沿,d值才會在輸出端q上輸出出來。符合這個特徵的就是非阻塞賦值 alway...
Socket程式設計中,阻塞與非阻塞的區別
阻塞 一般的i o操作可以在新建的流中運用.在伺服器回應前它等待客戶端傳送乙個空白的行.當會話結束時,伺服器關閉流和客戶端socket.如果在佇列中沒有請示將會出現什麼情況呢?那個方法將會等待乙個的到來.這個行為叫阻塞.accept 方法將會阻塞伺服器執行緒直到乙個呼叫到來.當5個連線處理完閉之後,...
Socket程式設計中,阻塞與非阻塞的區別
阻塞 一般的i o操作可以在新建的流中運用.在伺服器回應前它等待客戶端傳送乙個空白的行.當會話結束時,伺服器關閉流和客戶端socket.如果在佇列中沒有請示將會出現什麼情況呢?那個方法將會等待乙個的到來.這個行為叫阻塞.accept 方法將會阻塞伺服器執行緒直到乙個呼叫到來.當5個連線處理完閉之後,...