セマフォは、一度にクリティカル領域に入ることができるスレッドの数をカウント数で指定することを意味します。アプリケーション内のスレッド数はいくつですか?どのようにセマフォのカウントを設定するには?
回数を設定し、次のコードは、私たちはいつでも実行されている5つのスレッドを持つことができ、それぞれの時間を意味5.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static Semaphore semaphore = new Semaphore(5, 5);
static void Main(string[] args)
{
Task.Factory.StartNew(() =>
{
for (int i = 1; i <= 15; ++i)
{
PrintSomething(i);
if (i % 5 == 0)
{
Thread.Sleep(2000);
}
}
});
Console.ReadLine();
}
public static void PrintSomething(int number)
{
semaphore.WaitOne();
Console.WriteLine(number);
semaphore.Release();
}
}
}
です。印刷結果がポイントを確認します。
私の質問は、あまりにも多くのスレッドが実行されて表示されないことです。 15スレッドが稼働していると言えば、たびに5スレッドだけを共存させることができます。スレッドは2つしかありません。
私は何か誤解していますか?
タイトルを意味のあるものに編集してください。 * Semaphore *と* Multithreading *はどちらもタグに入っているので、重複してタイトルには含まれていないので意味のない内容にはなりません。あなたのタイトルは、あなたが持っている問題やあなたが質問している質問を、将来の読者が検索結果のリストに表示するのに役立つ方法で説明する必要があります。 –
専用のスレッドではなく、スレッドプール上で作業をスケジューリングする可能性があります。 – vcsjones
システムはあなたに最初のスレッドを与えます。タスクを実行するワーカースレッドを作成しました。それは2つを作る。 –