问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于c#中Mutex的问题

发布网友 发布时间:2022-04-14 17:08

我来回答

2个回答

懂视网 时间:2022-04-14 21:29

游标共享如何使用Mutex kks 使用mutex以便保护对于下述基于parent cursor父游标和子游标child cursor的一系列操作 对于父游标parent cursor的操作: 基于发生的不同操作,对应不同的等待事件: 在某个父游标名下创建一个新的游标 == cursor:mutex X 检查一个

游标共享如何使用Mutex

kks 使用mutex以便保护对于下述基于parent cursor父游标和子游标child cursor的一系列操作

对于父游标parent cursor的操作:

基于发生的不同操作,对应不同的等待事件:
在某个父游标名下创建一个新的游标 ==> cursor:mutex X
检查一个父游标 ==> cursor:mutex S
绑定值捕获 ==> cursor:mutex X
保护父游标的mutex嵌入在父游标结构内
针对父游标parent cursor的Mutex类型为’Cursor Parent’ (kgx_kks2).
针对父游标parent cursor的Mutex等待事件均为’ Cursor: mutex *’的形式

Mutex是如何替代library cache pin来保护cursor heap的?

传统的’library cache pin’在10.2.0.2之后默认被取代, 此处PIN被Mutex及其ref count取代。 当进程执行游标语句时或者需要PIN,或者需要hard parse一个子游标heap。
在版本10.2.0.1中, 使用mutex部分代码替代PIN的功能默认是不激活的,实际上这取决于隐藏参数_KKS_USE_MUTEX_PIN,在10.2.0.2之后_KKS_USE_MUTEX_PIN默认为TRUE。 换而言之在版本10.2中我们还是可以关闭KKS使用MUTEX替代PIN保护CURSOR的, 但是在版本11g中则几乎无法关闭MUTEX。 注意10.2中仅当KKS真正使用MUTEX时,library cache pin不再用作cursor pin。
基于对不同的游标统计信息的操作有不同的等待事件:
为执行某个SQL而PIN一个游标Cursor ==>Cursor: Pin S Wait on X
当执行一个游标而PIN Cursor,而该Cursor正被其他进程以S mode检测 ==> cursor:pin S
当试图重建一个游标Cursor ==> Cursor: pin X 该等待事件一般不太会看到,因为当一个游标正被执行,且其需要重建时会有另一个游标被创建
保护游标的mutex嵌入在游标结构内
Mutex类型为’Cursor Pin’ (kgx_kks3)
等待事件均为 ‘cursor: pin *’的形式

KKS使用MUTEX情况下SQL语句的 解析与执行的收益

在版本10.2中, 以下是几个SQL解析与执行从MUTEX哪里获得主要收益:

在某个父游标下构建一个新的子游标
首先这种构建新子游标的操作更廉价了, 当时Maclean仍要告诫你 一个父游标下过多的子游标仍不是一件好事情
对父游标的检测
在找到一个合适的游标并执行前,父游标需要被适当检测。 对父游标的这种检测目前也使用mutex来保护了,所以这种检测更的成本更低了
对于已经加载在Library Cache 中的SQL语句重复执行
常规情况下,当一个进程要执行SQL游标前总是必须要先pin它
不使用MUTEX的情况:若游标处于OPEN状态下以便今后的重复执行,且参数cursor_space_for_time(CSFT 目前已不推荐使用该参数)为TRUE,则每一次重复执行可以不需要library cache pin。 若游标处于OPEN状态下但是cursor_space_for_time=false,则进程在重复执行SQL游标前总是要先拿library cache pin
使用MUTEX的情况: 相反,若使用mutex来替代library cache pin时,则无需关心cursor_space_for_time 。 仅第一个进程需要做一个PIN他后续进程都只需要简单地在对应保护cursor heap的mutex上拿一个共享reference 。

真正理解Mutex相关的等待

Mutex数据结构中存放了Holder id持有者ID , Ref Count,和其他Mutex相关的统计信息。 Holder id对应于持有该Mutex的session id (v$session.sid) 。 特别注意, Ref Count是进程并发以S mode参考该Mutex的进程数量

当一个Mutex被以X mode 持有,则Holder id 为对应持有该mutex的session id,而Ref Count为0。

每一个共享S mode持有者仅仅增加mutex上的Ref Count。 可供大量session并发以S mode持有参考一个Mutex。 但是注意更新ref count的操作是串行的, 这是为了避免错漏并维护mutex中正确的ref count。

下面我们详细介绍一个执行游标过程中对mutex share pin的过程:

某进程以SHRD 模式申请一个Mutex,并尝试临时修改该Mutex的Holder ID
若该Mutex正被他人更新,则该session会将Holder id设置为本session的sid,之后该进程将增加ref count,之后再清楚mutex上的Holder id。简单来说 这个Holder id是真正做了并行控制的功能。 若该Holder id 被设置了,则说明该Mutex要么被以EXCL模式持有,要么正有一个其他进程在以S mode申请该Mutex的过程中(例如更新Ref Count)。当更新Ref Count时临时设置holder id的目的就是为了实现避免其他进程并发更新该Mutex的机制。 通过这些例子说明了 , Mutex既可以用作Latch并发控制, 也可用作pin。
若Holder id已被设置,则申请进程将可能进入等待事件 。 例如若当前Mutex的持有者进程正以X mode更新该Mutex,则申请者的等待事件应为”cursor: pin S on X” 。 而若当持有者Holder并不是”真的要持有” 该Mutex,而仅仅是尝试更新其Ref Count,则第二个进程将等在’ Cursor :pin S’等待事件上; 实际正在更新Ref count的操作时很快的,是一种轻微的操作。 当第一个进程正在更新mutex,则后续的申请进程将进入spin 循环中255次等待前者结束。 当mutex上不再有 Holder id时(如前者的进程已经更新完Ref Count)时, 则申请者进程将Holder ID设为自身的SID,并更新Ref Count,并清除Holder id。 若在255次循环SPIN后mutex仍不被释放,则该进程进入等待并不再跑在CPU上。

Mutex的相关统计视图

V$MUTEX_SLEEP

shows the wait time, and the number of sleeps for each combination of mutex type and location.

Column Datatype Description
MUTEX_TYPE VARCHAR2(32) Type of action/object the mutex protects
LOCATION VARCHAR2(40) The code location where the waiter slept for the mutex
SLEEPS NUMBER Number of sleeps for this MUTEX_TYPE and LOCATION
WAIT_TIME NUMBER Wait time in microseconds

V$MUTEX_SLEEP_HISTORY

displays time-series data. Each row in this view is for a specific time, mutex type, location, requesting session and blocking session combination. That is, it shows data related to a specific session (requesting session) that slept while requesting a specific mutex type and location, because it was being held by a specific blocking session. The data in this view is contained within a circular buffer, with the most recent sleeps shown.

Column Datatype Description
SLEEP_TIMESTAMP TIMESTAMP(6) The last date/time this MUTEX_TYPE and LOCATION was slept for by theREQUESTING_SESSION, while being held by the BLOCKING_SESSION.
MUTEX_TYPE VARCHAR2(32) Type of action/object the mutex protects
GETS NUMBER The number of times the mutex/location was requested by the requesting session while being held by the blocking session. GETS is only incremented once per request, irrespective of the number of sleeps required to obtain the mutex.
SLEEPS NUMBER The number of times the requestor had to sleep before obtaining the mutex
REQUESTING_SESSION NUMBER The SID of a session requesting the mutex
BLOCKING_SESSION NUMBER The SID of a session holding the mutex
LOCATION VARCHAR2(40) The code location where the waiter slept for the mutex
MUTEX_VALUE RAW(4) If the mutex is held in exclusive (X) mode, this column shows the SID of the blocking session, else it shows the number of sessions referencing the mutex in S mode.
P1 NUMBER Internal use only
P1RAW RAW(4) Internal use only
P2 NUMBER Internal use only
P3 NUMBER Internal use only
P4 NUMBER Internal use only
P5 VARCHAR2(64) Internal use only.
askmaclean 主要来源!

热心网友 时间:2022-04-14 18:37

你这种方式是比较合理的方式,lpClassName 是要查的,而且也是固定的。

如果你不用 lpClassName ,可以用程序的标题

IntPtr hWnd = FindWindow(null, "标题");
ShowWindowAsync(hWnd, 1);
SetForegroundWindow(hWnd);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
光线为什么不存在 炒菜时要等到油冒烟吗 高考数学选修没涂有分吗? 高考选修不涂有分数吗 《宫》中插曲是什么乐器演奏的? 电视剧《宫》的主题曲和片尾曲分别是什么? 爱我的人和我爱的人原唱是裘海正还是游鸿明 刑法对追诉时效的规定 刑事案件追诉期限的法律规定是什么? 爱奇艺海外版怎么下载 为什么不准卖外地烟 css如何实现数字换行效果 私自卖外烟违法,犯法吗 手机和sd卡重置之后开机显示sd卡受损 如何格式化内置SD卡 三星i917内存卡失效,如何重置? 怎样重置命名外置sd卡? 你好,我想问一下,在京东刷单,任务没完成,他们说钱退不了,改怎么处理? 京东刷单诈骗,都别买京东货了? iPod touch5停产了吗 京东东东超市怎么玩法? 京东刷商品预约平台有哪些? ipod touch5的好处,优点缺点有哪些? 咋刷豆子 玫瑰金iphone6s plus型号ML6E2CH/A是4G了手机吗 Apple平板电脑ipad哪款有粉色(玫瑰金)?和苹果ipad上市顺序 玫瑰精油和玫瑰精油面膜粉是怎么回事 苹果6s玫瑰金mkrk2ll/a是什么版本 我昨天晚上买了苹果6s玫瑰金型号ml7k2ch/a序列号f4mqg64ggryf是正品吗 OPPO R9s手机为什么开免提开视频没有声音?如何解决? 为什么中国大陆不让卖外国的香烟 为什么555烟不能卖呢? 请问怎样实现css中的换行,是br吗? 国家为什么禁卖外烟 为什么市场上不能卖女烟 烟草专卖可以卖外烟不 深圳为什么不能出售外烟 我艹 为什么苏州不允许出售外烟 游戏画面被任务栏挡住了,郁闷啊,坑爹的仙剑又不能调成全屏的,求高手 电脑win7系统,打开应用程序之后全屏,应用程序的状态栏被系统的任务栏遮挡住了 都说《星际争霸2》是款好游戏,为什么玩的人那么少? 玩得人少又比较好玩的网游 有什么好玩的游戏,求少人玩的,玩的时间长点的。我怕小学生 求一款 玩的人很少的 网络游戏 有什么好玩的游戏。玩的人要少 现场玩的好玩游戏(人数较少) 怎样用银行卡充值QQ币? 现实生活中有什么好玩的游戏,人多人少的都可以 如何用银行卡充值QQ币 很少人玩,但很好玩的单机游戏,有人知道吗?