| 

.NET C# Java Javascript Exception

0
Mein Programm startet pro Prozessor einen Thread um sehr viele Dateien einzulesen und die Inhalte zu verarbeiten. Ich brauche pro Datei eine eindeutige aufsteigende und lückenlose "ID"-Nummer (also 1, 2, 3, ...). Wie implementiert man sowas am besten? Ich verwende C++ mit der WinAPI und könnte einen Mutex verwenden (http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx), habe aber gelesen, dass das zu langsam ist und nicht auf mehr als 4 CPUs skaliert.
02.02.2011
thread 1 1
1
So ganz hab ich dein Problem noch nicht verstanden. Jede Datei erhält eine ID. Und die muss eindeutig sein. Warum machst du dann nicht einen einleitenden Prozess (single thread), der erst einmal den vorhandenen Dateien eine ID zuweist, etwa in einem Dictionary. Das Dictionary übergibst du dann jedem Thread zusammen mit dem Dateibereich, den der Thread bearbeiten soll. Somit hast du keine Synchronisierungsprobleme.
tboerner 03.02.2011
Es sind sehr sehr viele Dateien, potentiell unendlich viele, weil diese von einem anderen "System" angelegt werden. Das Dictionary würde riesig werden.
thread 03.02.2011
2 Antworten
2
Nichtsdestotrotz kannst du aber einen Verteiler-Thread bauen, der die Dateien von dem anderen "System" übernimmt, mit ID versieht und sie in Pipelines für die Worker-Threads stopft. Ist eine Pipeline leer, macht der Worker nichts, bis wieder eine Datei da ist.
03.02.2011
tboerner 509 8
0
ein statischer Zähler verwenden?

class Program
{
static void Main(string[] args)
{
for (int i = 0; i< 35; i ++ )
{
new Thread(new ThreadStart(ThreadMethod)).Start();
}

Console.ReadLine();
}
private static void ThreadMethod()
{
Console.WriteLine(IncrementalIndexer.Index);
}
}

public class IncrementalIndexer
{
private static int index = 0;
public static int Index { get { return index++; } }
}
07.02.2011
Leo 1

Stelle deine Cplusplus-Frage jetzt!