日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

线程令牌

發(fā)布時(shí)間:2025/5/22 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程令牌 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  最近在項(xiàng)目中碰到一個(gè)很頭疼的問(wèn)題,在前端連接事件中寫了一個(gè)廣播線程,該廣播線程寫在while循環(huán)中,但是前臺(tái)會(huì)有很多個(gè)客戶端,沒(méi)連接一次就會(huì)有一個(gè)廣播線程開(kāi)啟,很吃資源,剛開(kāi)始我解決這個(gè)問(wèn)題的方法是每次觸發(fā)連接事件是檢測(cè)一下當(dāng)前連接數(shù),如果是count_client<=1,就開(kāi)線程,否則跳過(guò)廣播,但這個(gè)方法只適用于連接事件中判斷,如果我是在接收事件中,根據(jù)接收結(jié)果開(kāi)啟廣播線程,那么就無(wú)法通過(guò)連接數(shù)來(lái)判斷是否該開(kāi)啟廣播,我思考了好久,想起算法中有個(gè)token的概念,在此可以拿來(lái)一用。

  在程序中設(shè)置一個(gè)全局線程變量tokenThread,其相當(dāng)于一個(gè)令牌,擁有令牌的線程則擁有開(kāi)啟線程的權(quán)限,當(dāng)這個(gè)收?qǐng)?zhí)令牌的線程在執(zhí)行的過(guò)程中,如果有其他線程想要開(kāi)啟,都會(huì)被拒絕,知道當(dāng)前執(zhí)行線程結(jié)束,釋放令牌,其他線程才可以開(kāi)啟。

  因?yàn)槭亲约鹤聊サ姆椒?#xff0c;簡(jiǎn)單的寫了個(gè)demo,如果有大牛發(fā)現(xiàn)demo中有不足之處 ,歡迎指出,謝謝。

  demo如下:

1 static Thread tokenThread = null;//線程令牌 2 static int i = 0;//控制廣播結(jié)束 3 public static void Greating() 4 { 5 6 Thread th = new Thread(() => 7 { 8 i = 0; 9 while (i++<5)//廣播數(shù)據(jù)5次后結(jié)束 10 { 11 Console.WriteLine("我是廣播線程{0},我開(kāi)始廣播啦!", Thread.CurrentThread.ManagedThreadId); 12 Thread.Sleep(1000); 13 } 14 Console.WriteLine("我不播啦!"); 15 tokenThread = null; 16 }); 17 if(tokenThread==null) //如果令牌沒(méi)人使用,則賦給該線程,否則跳過(guò)該線程 18 { 19 tokenThread = th; 20 th.Start(); 21 } 22 23 } View Code

  首先定義一個(gè)全程線程令牌,給其賦值為NULL,然后寫了個(gè)Greeting()函數(shù),在函數(shù)中開(kāi)了個(gè)廣播線程,廣播5次,用時(shí)5秒,廣播結(jié)束時(shí),把令牌釋放,重新賦為NULL,在啟動(dòng)線程時(shí)加了個(gè)if(tokenThread==null)的判斷,如果令牌處于釋放狀態(tài),則當(dāng)前線程獲得令牌,啟動(dòng)線程,執(zhí)行廣播5次,否則跳過(guò),相當(dāng)于本次Greeting()函數(shù)什么都沒(méi)執(zhí)行。

  main函數(shù)很簡(jiǎn)單,只是開(kāi)了個(gè)while循環(huán),在里面沒(méi)1秒掉用一次Greeting()函數(shù)

1 static void Main(string[] args) 2 { 3 while (true) 4 { 5 Greating(); 6 Thread.Sleep(1000); 7 } 8 9 } View Code

如果沒(méi)有令牌控制的話,沒(méi)秒都會(huì)開(kāi)一個(gè)廣播線程。

  最終顯示結(jié)果如下,廣播5次后會(huì)開(kāi)新線程廣播:

?

轉(zhuǎn)載于:https://www.cnblogs.com/gongheng/p/5744503.html

總結(jié)

以上是生活随笔為你收集整理的线程令牌的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。