1. 程式人生 > >利用SpinWait進行工作執行緒同步

利用SpinWait進行工作執行緒同步

兩個工作執行緒t1和t2,同時啟動這兩個執行緒,其中t2需要等待t1的執行結果達成某一條件之後再繼續往下執行。

  class Program
    {
        private static int number = 0;

        private static void Method1()
        {
            for (int i = 0; i < 20; ++i)
            {
                number += 1;
                Thread.Sleep(1000);
                Console.WriteLine(number);
            }
        }

        private static void Method2()
        {
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Method2");
            }

            SpinWait.SpinUntil(() => number > 10);
            Console.WriteLine("A");
        }

        static void Main(string[] args)
        {
                number = 0;
                Thread t1 = new Thread(new ThreadStart(Method1));
                Thread t2 = new Thread(new ThreadStart(Method2));

                t1.Start();
                t2.Start();

                // 等待執行緒退出, Timeout.Infinite表示無限等待  
                while (t1.Join(Timeout.Infinite) && t2.Join(Timeout.Infinite))
                {
                    Console.ReadLine();
                    break;
                }
        }
    }


從執行結果可以看出,開始t1和t2都在輸出內容,但t2輸出5次之後便停止輸出了,直到滿足number>10這一條件才繼續往下執行。

相關推薦

利用SpinWait進行工作執行同步

兩個工作執行緒t1和t2,同時啟動這兩個執行緒,其中t2需要等待t1的執行結果達成某一條件之後再繼續往下執行。 class Program { private static int number = 0; private sta

利用synchronized實現多執行同步

        多執行緒程式設計帶來便利性的同時,也給我們的程式設計帶來了難度,因為多執行緒的執行具有隨機性,當多個執行緒對共享資源操作時,就很容易引發問題。       下面模擬了一個取錢的執行緒,當兩個取錢的執行緒對同一個賬戶進行操作時,我們就會發現異常。      下

利用lock實現多執行同步

        我們不僅可以使用synchronized來實現多執行緒同步,還可以通過建立鎖物件來實現多執行緒的同步,還是上次模擬取現的操作,這次利用lock物件實現同步,下面是程式碼: import java.util.concurrent.locks.Reentrant

Java中使用CountDownLatch進行執行同步

CountDownLatch介紹在前面的Java學習筆記中,總結了Java中進行多執行緒同步的幾個方法:1、synchronized關鍵字進行同步。2、Lock鎖介面及其實現類ReentrantLock

Looper機制:主執行利用handler向工作執行傳送訊息

注意:由主執行緒向非UI執行緒中傳送訊息的時候,非UI執行緒需要先新增訊息佇列,然後處理訊息迴圈。 (1).預設情況下android中新誕生的執行緒是沒有開啟訊息迴圈的。(主執行緒除外,主執行緒系統會自動為其建立Looper物件,開啟訊息迴圈。)

Linux利用訊號量實現執行同步與互斥

執行緒使用互斥鎖可以實現執行緒間的互斥,而互斥鎖本身就是對資源的一種標識狀態,當可以申請到鎖時說明此時資源可以使用,當申請鎖失敗時說明資源此時被其他執行緒所佔用不可使用,我們可以使用訊號量來代替互斥鎖實現。 訊號量用來表示資源數目,當一個執行緒要去訪問資源時,必須先去申請

利用多核多執行進行程式優化

大家也許還記得 2005 年 3 月 C++ 大師 Herb Sutter 在 Dr.Dobb’s Journal 上發表了一篇名為《免費的午餐已經結束》的文章。文章指出:現在的程式設計師對效率、伸縮性、吞吐量等一系列效能指標相當忽視,很多效能問題都仰仗越來越快

linux 下基於特定通訊協議利用執行同步通訊機制實現的串列埠通訊

</pre><pre name="code" class="cpp">/** *@Title:利用多執行緒同步通訊機制實現串列埠通訊 *@Introduce:主要完成根據特定的通訊協議實現串列埠與PC上特定串列埠 * 通訊軟體的通訊。測試版,只

windows下多執行同步利用事件物件,互斥物件,關鍵程式碼段)實現

一:利用事件實現執行緒同步 1.createthread函式的用法 hThread = CreateThread(&security_attributes, dwStackSize, ThreadProc,pParam, dwFlags, &idThre

使用dispatch_group來進行執行同步

一、簡單介紹下將會用到的一些東西英語不好就不翻譯官方文件了..1、dispatch_group_async* Submits a block to a dispatch queue and associates the block with the given * dispatch group //將一個bl

Java多執行同步同步程式碼塊、wait、notify與notifyAll的真正含義與工作原理

今天在和導師討論Java多執行緒程式設計的同步問題時,發現自己對同步程式碼塊、wait()方法、notify()方法和notifyAll()方法的理解不太清晰,於是在網上查閱資料,可是結果眾說紛紜,又在

禁止在視窗介面執行進行執行同步進行耗時的操作。。。

最近工作時,經常碰到窗口出現未響應的現象,後面發現原因是這樣的: 1、使用者點選XX按鈕時,在XX按鈕事件中呼叫了aa.dll中的介面XXXAPI_TEST(); 2、aa.dll中的介面XXXAPI_TEST()內部有進行執行緒同步的操作。 3、因為執行緒同步的原因,導致

利用 HandlerThread 建立一個後臺工作執行( AsyncTask 的缺點),處理圖片縮放時記憶體溢位問題

       HandlerThread 可以幫助建立一個擁有有效 Looper 的後臺執行緒,該 Looper 會關聯一個 Handler,而 Handler 中的 MessageQueue 會處理所有的任務。Android 中最常用的後臺技術之一就是 AsyncTa

最全java多執行總結2--如何進行執行同步

  上篇對執行緒的一些基礎知識做了總結,本篇來對多執行緒程式設計中最重要,也是最麻煩的一個部分——同步,來做個總結。   建立執行緒並不難,難的是如何讓多個執行緒能夠良好的協作執行,大部分需要多執行緒處理的事情都不是完全獨立的,大都涉及到資料的共享,本篇是對執行緒同步的一個總結,如有紕漏的地方,歡迎在評論中指

Java執行-同步和非同步的區別

1.                                         &nb

java:執行同步

ThreadLocal與其它同步機制的比較: Threadlocal和其他所有的同步機制都是為了解決多執行緒中的對同一變數的訪問衝突。 在普通的同步機制中,是通過對物件加鎖來實現多個執行緒對同一變數的安全訪問的。這時該變數是多個執行緒共享的,使用這種同步機制需要很細緻的分析在什麼時候對變數進

qt 中建立一個工作執行(例子)

當一個事件需要很長的處理時間,就建立一個工作執行緒,防止主介面卡死。 1.新建一個QT的gui專案,裡面包含main.cpp,mainwindow.h,mainwindow.cpp,mainwindow.ui檔案 2.新建一個頭檔案thread.h,派生一個執行緒類,重新寫一個執行緒的入口函式。

java 多執行同步

            執行緒屬性: 1.執行緒優先順序,   優先順序高度依賴於系統,不要讓程式的正確性依賴於優先順序。預設情況子執行緒會繼承父執行緒的優先順序。 2.守護執行緒,   唯一用途是為其他執行緒提供服務,當只剩

【Windows】執行漫談——.NET執行同步之Interlocked和ReadWrite鎖

摘要: 本系列意在記錄Windwos執行緒的相關知識點,包括執行緒基礎、執行緒排程、執行緒同步、TLS、執行緒池等。 這篇來說說靜態的Interlocked類和ReadWrite鎖 .NET中的Interlock

Windows程式設計之執行同步

Windows程式設計中執行緒同步的主要機制:互斥、事件、訊號量、可等待定時器,不說了,直接上程式碼: // ThreadSync.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <windows.h>