在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C++/ D語言并發(fā)
類的訪問修飾符
D語言運(yùn)算符
D語言邏輯運(yùn)算符
類指針
D語言元組
D語言指針
D語言模塊
D語言sizeof運(yùn)算符
D語言混合類型
D語言封裝
D語言條件編譯
類的靜態(tài)成員
D語言do...while循環(huán)
D語言結(jié)構(gòu)體
重載
D語言字符串-String
D語言決策語句
D語言接口
D語言for循環(huán)
D語言switch語句
D語言關(guān)聯(lián)數(shù)組
D語言范圍
D語言枚舉Enums
契約式編程
D語言并發(fā)
D語言開發(fā)環(huán)境設(shè)置
D語言別名
D語言常值
D語言常量
D語言函數(shù)
D語言if嵌套語句
D語言循環(huán)
D語言概述,D語言是什么?
D語言運(yùn)算符優(yōu)先級
D語言continue語句
D語言異常處理
D語言break語句
D語言if...else語句
D語言類和對象
類繼承
D語言字符
D語言教程
D語言關(guān)系運(yùn)算符
比較操作符重載
構(gòu)造函數(shù)和析構(gòu)函數(shù)
D語言抽象類
D語言if語句
D語言賦值運(yùn)算符
D中算術(shù)運(yùn)算符
D語言類成員函數(shù)
D語言位運(yùn)算符
D語言變量
D語言數(shù)據(jù)類型
D語言文件I/O
D語言數(shù)組
一元運(yùn)算符重載
D語言嵌套switch語句
D語言基本語法
二元運(yùn)算符重載
this指針
D語言聯(lián)合體
D語言模板
D語言嵌套循環(huán)
D語言while循環(huán)

D語言并發(fā)

并發(fā)性是使程序在同一時間運(yùn)行一個以上的線程。并發(fā)程序的一個例子是在Web服務(wù)器響應(yīng)多個客戶端在同一時間。并發(fā)是容易與消息傳遞卻很難,如果它們是基于數(shù)據(jù)共享的寫入。

傳遞線程之間的數(shù)據(jù)被稱為消息。消息可以由任何類型和任意數(shù)量的變量。每個線程都有一個ID,它是用于指定郵件的收件人。即啟動另一個線程的任何線程被稱為新線程的所有者。即啟動另一個線程的任何線程被稱為新線程的所有者。

啟動線程

spawn() 接受一個函數(shù)指針作為參數(shù),并從該函數(shù)啟動一個新線程。正在開展的功能,包括它可能調(diào)用其他函數(shù)的任何操作,將在新的線程中執(zhí)行。owner和worker開始獨(dú)立執(zhí)行的,好像他們是獨(dú)立的程序:

import std.stdio;
import std.stdio;
import std.concurrency;
import core.thread;

void worker(int a)
{
   foreach (i; 0 .. 4)
   {
      Thread.sleep(1);
      writeln("Worker Thread ",a + i);
   }
}

void main()
{
   foreach (i; 1 .. 4)
   {
      Thread.sleep(2);
      writeln("Main Thread ",i);
      spawn(&worker, i * 5);
    }

    writeln("main is done.");

}

當(dāng)上面的代碼被編譯并執(zhí)行,它在讀取上一節(jié)中創(chuàng)建的文件,并產(chǎn)生以下結(jié)果:

Main Thread 1
Worker Thread 5
Main Thread 2
Worker Thread 6
Worker Thread 10
Main Thread 3
main is done.
Worker Thread 7
Worker Thread 11
Worker Thread 15
Worker Thread 8
Worker Thread 12
Worker Thread 16
Worker Thread 13
Worker Thread 17
Worker Thread 18

線程標(biāo)識符

thisTid變量是全局可用在模塊級始終是當(dāng)前線程的id。也可以收到重生時被調(diào)用threadid。一個例子如下所示。

import std.stdio;
import std.concurrency;

void printTid(string tag)
{
   writefln("%s: %s, address: %s", tag, thisTid, &thisTid);
}

void worker()
{
   printTid("Worker");
}

void main()
{
   Tid myWorker = spawn(&worker);

   printTid("Owner ");

   writeln(myWorker);
}

當(dāng)上面的代碼被編譯并執(zhí)行,它在讀取上一節(jié)中創(chuàng)建的文件,并產(chǎn)生以下結(jié)果:

Owner : Tid(std.concurrency.MessageBox), address: 10C71A59C
Worker: Tid(std.concurrency.MessageBox), address: 10C71A59C
Tid(std.concurrency.MessageBox)

消息傳遞

send() 發(fā)送的消息和receiveOnly()等待一個特定類型的消息。還有prioritySend(),receive()和receiveTimeout(),這將在后面進(jìn)行說明。在下面的程序的所有者將其工作者int類型的消息,并等待來自double類型的工人消息。線程繼續(xù)發(fā)送郵件來回,直到車主發(fā)出了一個負(fù)的int。一個例子如下所示。

import std.stdio;
import std.concurrency;
import core.thread;
import std.conv;

void workerFunc(Tid tid)
{
   int value = 0;

   while (value >= 0) 
   {
      value = receiveOnly!int();
      auto result = to!double(value) * 5;
      tid.send(result);
   } 

}

void main()
{
   Tid worker = spawn(&workerFunc,thisTid);
   
   foreach (value; 5 .. 10) {
      worker.send(value);
      auto result = receiveOnly!double();
      writefln("sent: %s, received: %s", value, result);
   }   
 
   worker.send(-1);
}

當(dāng)上面的代碼被編譯并執(zhí)行,它在讀取上一節(jié)中創(chuàng)建的文件,并產(chǎn)生以下結(jié)果:

sent: 5, received: 25
sent: 6, received: 30
sent: 7, received: 35
sent: 8, received: 40
sent: 9, received: 45

消息等待傳遞

一個簡單的例子與傳遞與等待消息如下所示。

import std.stdio;
import std.concurrency;
import core.thread;
import std.conv;

void workerFunc(Tid tid)
{
   Thread.sleep(
            
上一篇:D語言范圍