synchronized在Windows是如何实现的?

lydmc 2007-06-07 03:42:16
初看synchronized觉得像Windows的临界区。
但当它内部有Wait语句时:
进入synchronized的范围时,则获取了this在这个线程的锁定。
而再进入了Wait状态时,会释放this在这个线程的锁定。

这个就不同于Windows的临界区了,临界区是不会被自动退出的。

请各位指教。
...全文
225 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracle1000g 2007-12-11
  • 打赏
  • 举报
回复
这个涉及到多线程的问题,你说的这个问题一般很难达到解决,为什么,
因为java是一个虚拟机,他是在OS之上的一层虚拟软件,所以他在语言层次上实现了进入等待的自动释放线程锁定
而c++是一个native可执行文件,他调用的完全是靠windows提供的多线程的win32 API来做的,要实现你说的功能必须改造windows提供的win32 API的实现机制

不知道你满意我的答复否

我的博客地址:http://blog.csdn.net/oracle1000g
现阶段主要做SOA的研究,做java开源技术的开发和推广,希望交流,交流让人进步
likgui 2007-06-13
  • 打赏
  • 举报
回复
关注
lydmc 2007-06-07
  • 打赏
  • 举报
回复
可能我没有说清楚:
[java]
class A{
public synchronized foo(){
...
wait(); // 这里如果进入等待,则释放this在这个线程的锁定
...
}


[c++]
...
EnterCriticalSection(&m_lock);
...
WaitforSingleObject(...); // 这里如果进入等待,并不会释放m_lock在这个线程的锁定
...
LeaveCriticalSection(&m_lock);
...

c++怎样实现类似java中“进入等待,同时退出临界区”的效果

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧