Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Proč v tomto příkladu zámek i na frontě?

Aktivity
Avatar
Uživatel919
Člen
Avatar
Uživatel919:15.5.2016 20:40

Nemohu přijít na to, proč je v příkladu níže zámek i na frontě (nejenom tedy na kódu metod). Prý je to nezbytné, ale není řečeno již proč.

using System;
using System.Threading;
using System.Collections;

public class CrudeThreadPool
{
static readonly int MaxWorkThreads = 4;
static readonly int WaitTimeout = 2000;

public delegate void WorkDelegate();

public CrudeThreadPool() {
stop = false;
workLock = new Object();
workQueue = new Queue();
threads = new Thread[ MaxWorkThreads ];

for( int i = 0; i < MaxWorkThreads; ++i ) {
threads[i] =
new Thread( new ThreadStart(this­.ThreadFunc) );
threads[i].Start();
}
}

private void ThreadFunc() {
lock( workLock ) {
do {
if( !stop ) {
WorkDelegate workItem = null;
if( Monitor.Wait(wor­kLock, WaitTimeout) ) {
// Process the item on the front of the
// queue
lock( workQueue.SyncRoot ) {
workItem =
(WorkDelegate) workQueue.Dequ­eue();
}
workItem();
}
}
} while( !stop );
}
}

public void SubmitWorkItem( WorkDelegate item ) {
lock( workLock ) {
lock( workQueue.SyncRoot ) {
workQueue.Enqueue( item );
}

Monitor.Pulse( workLock );
}
}

public void Shutdown() {
stop = true;
}

private Queue workQueue;
private Object workLock;
private Thread[] threads;
private volatile bool stop;
}

public class EntryPoint
{
static void WorkFunction() {
Console.WriteLine( "WorkFunction() called on Thread {0}",
Thread.Curren­tThread.Managed­ThreadId );
}

static void Main() {
CrudeThreadPool pool = new CrudeThreadPool();
for( int i = 0; i < 10; ++i ) {
pool.SubmitWor­kItem(
new CrudeThreadPo­ol.WorkDelega­te(
EntryPoint.Wor­kFunction) );
}

// Sleep to simulate this thread doing other work.
Thread.Sleep( 1000 );

pool.Shutdown();
}
}

 
Odpovědět
15.5.2016 20:40
Avatar
Odpovídá na Uživatel919
sadlomaslox25:15.5.2016 21:49

podle me je cely priklad pekna blbost viz ty dva locky, nepouzivani generickych kolekci, vlastni delegati misto Action, pouzivani threadu misto tasku, a vubec pokus o implementaci vlastniho threadpoolu

 
Nahoru Odpovědět
15.5.2016 21:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.