什么是Java中并发编程中引用的监视器?
当我读到"每个对象都有一个监视器"这是什么意思?
这是一个特殊的对象吗?
我想监视Linux上特定进程使用的线程数.有没有一种简单的方法来获取这些信息而不影响流程的性能?
何时在C#中使用Monitor
类或lock
关键字来确保线程安全?
编辑:
到目前为止,答案似乎lock
是对Monitor
课程的一系列调用的简写.锁定电话到底是什么?或者更明确地说,
class LockVsMonitor
{
private readonly object LockObject = new object();
public void DoThreadSafeSomethingWithLock(Action action)
{
lock (LockObject)
{
action.Invoke();
}
}
public void DoThreadSafeSomethingWithMonitor(Action action)
{
// What goes here ?
}
}
Run Code Online (Sandbox Code Playgroud)
更新
谢谢大家的帮助:我发布了另一个问题,作为您提供的一些信息的后续跟进.由于您似乎精通这一领域,我发布了链接:此锁定和管理锁定异常的解决方案有什么问题?
在阅读有关Java线程的文章时,我经常注意到这样的表达:"当前线程是该对象监视器的所有者".我明白了:线程有权对对象进行操作.但我很困惑为什么我们使用短语"对象的监视器"而不是"对象的锁"?
简而言之,我不知道"监视器"这个词的含义.这个问题可能很奇怪而且很简单.但我希望任何人都可以帮助解决它.3KS
我希望我的线程更优雅地关闭,所以我试图实现一个简单的信令机制.我不认为我想要一个完全事件驱动的线程,所以我有一个工人用一个方法来使用一个关键部分Monitor
(相当于一个C#lock
我相信)来优雅地停止它:
DrawingThread.h
class DrawingThread {
bool stopRequested;
Runtime::Monitor CSMonitor;
CPInfo *pPInfo;
//More..
}
Run Code Online (Sandbox Code Playgroud)
DrawingThread.cpp
void DrawingThread::Run() {
if (!stopRequested)
//Time consuming call#1
if (!stopRequested) {
CSMonitor.Enter();
pPInfo = new CPInfo(/**/);
//Not time consuming but pPInfo must either be null or constructed.
CSMonitor.Exit();
}
if (!stopRequested) {
pPInfo->foobar(/**/);//Time consuming and can be signalled
}
if (!stopRequested) {
//One more optional but time consuming call.
}
}
void DrawingThread::RequestStop() {
CSMonitor.Enter();
stopRequested = true;
if (pPInfo) pPInfo->RequestStop();
CSMonitor.Exit(); …
Run Code Online (Sandbox Code Playgroud) 工作中的某个人刚刚询问了必须在同步中包装等待的原因.
老实说,我看不出推理.我理解javadocs所说的 - 线程需要成为对象监视器的所有者,但为什么呢?它会阻止哪些问题?(如果它确实是必要的,为什么等待方法不能获得监视器本身?)
我正在寻找一个相当深入的原因,或者可能是对文章的引用.我在快速谷歌中找不到一个.
哦,还有,thread.sleep如何比较?
编辑:很好的答案 - 我真的希望我可以选择不止一个,因为他们都帮助我理解发生了什么.
我正在寻找新的液晶显示器,但我担心光滑的显示器可能会在一整天的工作后造成更多的眼睛疲劳.我通常会在显示器前花很多时间,所以眼睛疲劳肯定是我想到的.您更喜欢哑光或有光泽的LCD屏幕吗?为什么?
简而言之:我想监视从应用程序到DLL的选定调用.
我们有一个旧的VB6应用程序,我们丢失了源代码(该公司当时没有使用源代码控制..).此应用程序使用第三方DLL.
我想在新的C++应用程序中使用此DLL.不幸的是,DLL API只是部分记录,所以我不知道如何调用某些函数.我有功能签名.
由于VB6应用程序使用此DLL,我想看看它如何调用多个函数.到目前为止,我已经尝试或看过 -
struct
模块在Python中进行许多转换,因为大多数函数使用指针传递值.由于我只需要记录函数参数,我想要一个简单的解决方案.有没有自动化工具,我可以告诉哪些功能要监控和签名,然后获取详细的日志文件?
Ultramon是一个很棒的双显示器程序(在显示器上拉伸屏幕),但我想知道在Visual Studio中是否有任何方法可以在一台显示器上打开一个代码选项卡,在第二个显示器上打开第二个代码选项卡监视器只运行一个Visual Studio实例?
或者是否有任何其他建议可以在双显示器和Visual Studio上获得最大的收益?