關鍵字Lock的簡單小例子

来源:https://www.cnblogs.com/Linxm51649/archive/2020/01/13/12187703.html

一、什麼是Lock? Lock——字面上理解就是鎖上;鎖住;把……鎖起來的意思; 為什麼要鎖?要鎖乾什麼?——回到現實中可想象到,這個衛生間我要上,其他人不要進來!(所以我要鎖住門);又或者土味情話所言,我要把你鎖在我的心裡,然後在裡面加個無限迴圈語句,不給你出來,也不被別人所得,你只能是我的,哈哈 ...


 

        一、什麼是Lock?

  Lock——字面上理解就是鎖上;鎖住;把……鎖起來的意思;

  為什麼要鎖?要鎖乾什麼?——回到現實中可想象到,這個衛生間我要上,其他人不要進來!(所以我要鎖住門);又或者土味情話所言,我要把你鎖在我的心裡,然後在裡面加個無限迴圈語句,不給你出來,也不被別人所得,你只能是我的,哈哈哈哈....

  上面的簡單想象,可以得到,我們之所以要鎖,就是因為我們想獨占某個資源(廁所and你的心愛人),或者在需要共用同一個資源的時候(更多的表現在多線程方面)。多線程可以簡單的理解為,一個線程看作是一個人,多線程就是多個人在幹活,每個人乾每個人的事,互不幹擾,如果你的代碼中出現類似(廁所這樣的公共資源),你就得加個鎖拉!不然多個人上同一個廁所,那畫面得.............咳咳咳~總之輕則數據異常,重則軟體崩潰。

  Lock關鍵字主要是實現多線程同步

  二、下麵提供幾個簡單的小例子:
    下麵的例子是根據自身能力給的例子,如有不妥之處,還請各位多多指導!

  1、新建一個Window窗體應用程式——略~

  2、添加一個鎖

          private static object o = new object();

  3、添加三個按鈕button
    (1)線程1按鈕以及線程方法

      按鈕1是實現開啟線程1;

      

 

 

 

 

 

 

 

 

 

      線程方法:

 

 

     this.Invoke()是一種托管方法——解決跨線程問題~      

 

 

 

    (2)線程2按鈕
     同理
          

 

       (3)同時執行兩個線程的按鈕

      

 

    4、加鎖和沒加鎖區別

    (1)加鎖效果

  

 

     (2)不加鎖

    去掉lock{}部分

 

   線程1和2同時寫入了1,數據衝突
   5、使用總結:

     建鎖對象——private static object o = new object();

    鎖住該鎖的地方——lock{};
    

  


您的分享是我們最大的動力!

更多相關文章
  • 今天在寫gin介面的時候,每次添加或修改個介面都需要重啟項目才能測試,感覺很麻煩。 因為beego有bee工具,bee run啟動項目fsnotify會監控文件變動,經查發現在iris項目中有個插件支持熱重啟。 使用方法如下: # 安裝rizla包 $ go get -u github.com/ka ...
  • 1. 安裝Sentry 2.在settings.py中配置 3.dsn的獲取 4.註意事項 最後,如有問題,請留言。 ...
  • 原文: "https://devblogs.microsoft.com/dotnet/configureawait faq/" .NET 在七多年前在語言和類庫添加了 。在那個時候,它像野火一樣流行,不僅遍及.NET生態系統,而且還可以以多種其他語言和框架進行複製。在利用非同步的其他語言構造,提供非同步 ...
  • 前言 在我們開發中可能需要設計一次性應用程式,這些實用程式可以利用接近原始源代碼的優勢,但可以在與主Web應用程式完全獨立的安全性上下文中啟動。具體在 [管理過程] (https://12factor.net/admin processes)中也已經列出了原因。 創建控制台應用 打開命令提示符,創建 ...
  • 說到驗證,那就需要做三件事: 定義驗證規則 按驗證規則進行檢查 報告驗證的錯誤。在把錯誤報告給API消費者的時候,報告里並不包含到底是服務端還是API消費者引起的錯誤,這是狀態碼的工作。而通常響應的Body裡面會包含一組驗證錯誤信息,API消費者可以把這些信息展示給API消費者的用戶。 定義驗證規則 ...
  • var url = data.url, params = data.params, try_times = data.try_times , async = data.sync == 'false' ? false : true; $.ajax({ url: url, type: "POST", t ...
  • 伴隨著dotnet core的不斷迭代,我們在享受.net性能上的提升之外,還收穫了許許多多新出現的API。不知您有沒有發現,有這樣一個類型在開始逐漸出現在我們的視野中 ———— ValueTask ...
  • 問題描述 最近在使用ef core連接oracle的發現Find、FirstOrDefault、Skip Task分頁等等方法執行失敗。使用的是docker安裝的oracle11,錯誤如下圖: 解決辦法 使用builder.UseOracleSQLCompatibility("11")方法來指定or ...
一周排行
  • C#中的DefaultView方法 簡介: 首先可建立一個表,對錶進行填充若幹條數據,代碼如下: //創建Table1 DataTable dt = new DataTable(); //對Table1添加列名,並設置列值類型 DataTable dt1 = new DataTable();//創建 ...
  • 1、運行程式報錯: FailFast: Couldn't find a valid ICU package installed on the system. 解決方法: yum install icu -y 2、程式運行後,本地可以訪問,但其他機器無法訪問,需要開放埠 firewall-cmd - ...
  • 只是一個Demo,所用有很多功能也沒有添加進去如分頁,輸入驗證,頁面也沒有進行精心佈局。 整體先來幾張圖解 ...
  • Core提供二種開發模式:Core Pages和Core MVC,今天介紹的是Core MVC。 1、創建web MVC項目 新建service/h_r.baseservice類庫文件、data/h_r.efdata類庫文件、common/h_r.common類庫文件。 引入需要的CSS文件和JS文 ...
  • 學習網址:https://docs.microsoft.com/zh-cn/visualstudio/get-started/visual-studio-ide?view=vs-2019 示範 vs2019: 變數的重命名的重構,更改該變數命名的同時,引用該變數的地方也會更改,如果該變數有被反射用到 ...
  • 1、在data裡面新建個Entity文件用於存放表映射,設計資料庫,執行如下語句 Scaffold-DbContext -Force "server=.;user=sunyong;password=1qaz!QAZ;database=hr;" Microsoft.EntityFrameworkCor ...
  • 1、發送郵件類,百度一大堆,這裡用的也是直接百度拿過來的 public static bool get_send_email(email email, string Title, string Body) { MailMessage mailMsg = new MailMessage(); mail ...
  • 1、添加用戶列表控制器,用於用戶列表顯示,登錄,增刪改查,郵件發送,下載 public userlistController(MainDbContext _db, ILogger<operatorlog> _logger, IOptions<email> sendMail) { db = _db; ...
  • 1、用戶列表頁面 @{ Layout = Layout = null;}<table id="datalistuser" class="easyui-datagrid" url="/userlist/getuserlist" toolbar="#toolbaruser" rownumbers="tr ...
  • 1、引用包 Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.SqlServer Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation Microsoft.AspNetCo ...