多线程之线程同步

摘要:
Pulse意味着释放当前锁定的lockObj,允许其他线程调用。Wait表示等待其他线程当前占用的lockObj。以下代码将交替运行两个线程:classTickTickTick{objectlockOn=newobject();publicvoidTick{{lock{if(!

Pulse(lockObj)表示释放当前被lock的lockObj,容许其它线程调用。(相当于临时挂起当前线程)

Wait(lockObj)表示等待当前被其它线程占用的lockObj。

以下的代码将会交替运行两个线程:

class TickTock
    {
        object lockOn = new object();
        public void Tick(bool running)
        {
            lock (lockOn)
            {
                if (!running)
                {
                    Monitor.Pulse(lockOn);
                    return;
                }
                Console.Write("Tick ");
                Monitor.Pulse(lockOn);//let tock() run
                Monitor.Wait(lockOn);//wait for tock() to complete
            }
        }
        public void Tock(bool running)
        {
            lock (lockOn)
            {
                if (!running)
                {
                    Monitor.Pulse(lockOn);
                    return;
                }
                Console.WriteLine("Tock");
                Monitor.Pulse(lockOn);
                Monitor.Wait(lockOn);
            }
        }
    }



免责声明:文章转载自《多线程之线程同步》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spark(十二)SparkSQL简单使用gethostbyname() -- 用域名或主机名获取IP地址下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

十、future其他成员函数、shared_future、atomic(原子操作)

一、 1 int mythread(){ 2 cout<<"thread"<<endl; 3 std::chrono::milliseconds dura(5000);//5秒钟 4 std::this_thread::sleep_for(dura);//休息5秒钟 5 return 5;...

win32之临界区

线程安全问题 每个线程都有自己的栈,而局部变量是存储在栈中的,这就意味着每个线程都有一份自己的“局部变量”,如果线程 仅仅使用 “局部变量” 那么就不存在线程安全问题 那如果多个线共用一个全局变量呢? 多线程的线程安全问题前提: 1、有全局变量 2、对全局变量有写的权限 我们写一段代码,模拟一下两个进程访问一个全局变量,代码如下: #include <...

Android学习——后台程序

Android学习——后台程序 在Android系统中我们一直在接触着前台界面程序,其实在一开始接触Android时就听说了,程序就有有界面和无界面之分。后台程序就是这类无界面的程序,它在后台执行,没有影响你的界面。比如短信监听程序,执行在后台,当有短信时才给你们提示,振动或声音;比如闹钟,设定好时间后,在定时通知你;再比如mp3播放器,选择好音乐后,在待...

Neety的基础使用及说明

BIO(缺乏弹性伸缩能力,并发量小,容易出现内存溢出,出现宕机每一个客户端对应一个线程 伪异步IO:创建线程池,由线程池里边的线程负责连接处理,M个个请求进来时,会在线程池创建N个线程。容易出现线程池阻塞。由一个线程池来处理客户端的请求。 NIO:异步非阻塞,服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路...

[WPF] 跨线程控制窗体UI

呼叫线程无法存取此对象 在WPF、WinForm这些应用程序中,必需是UI线程才能控制窗体。如果像是下列的范例程序一样,使用了非UI线程来控制窗体,那就会看到内容为「呼叫线程无法存取此对象,因为此对象属于另外一个线程」的InvalidOperationException例外错误。 <Window x: xmlns="http://...

多线程中的lua同步问题

最近写paintsnow::start时出现了一个非常麻烦的BUG,程序的Release版本大约每运行十几次就会有一次启动时崩溃(Debug版本还没崩溃过),崩溃点也不固定。经过简单分析之后,确定是线程同步的问题。于是便修改了线程通信的代码,并使用pthread_mutex_lock/unlock来防止冲突。重新编译后,崩溃频率有所减少。但是每运行约四十次...