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

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

D語(yǔ)言并發(fā)

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

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

啟動(dòng)線程

spawn() 接受一個(gè)函數(shù)指針作為參數(shù),并從該函數(shù)啟動(dòng)一個(gè)新線程。正在開(kāi)展的功能,包括它可能調(diào)用其他函數(shù)的任何操作,將在新的線程中執(zhí)行。owner和worker開(kāi)始獨(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)識(shí)符

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

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()等待一個(gè)特定類(lèi)型的消息。還有prioritySend(),receive()和receiveTimeout(),這將在后面進(jìn)行說(shuō)明。在下面的程序的所有者將其工作者int類(lèi)型的消息,并等待來(lái)自double類(lèi)型的工人消息。線程繼續(xù)發(fā)送郵件來(lái)回,直到車(chē)主發(fā)出了一個(gè)負(fù)的int。一個(gè)例子如下所示。

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

消息等待傳遞

一個(gè)簡(jiǎn)單的例子與傳遞與等待消息如下所示。

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

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