[C/C++] Posix-Threads

Hallo!

Ich schreibe gerade an einem Programm mit Threads. Ich habe einen Zahlenbereich von iStart bis 25000000. Es sollen immer 10 Threads auf einmal erstellt werden. Jeder Thread kriegt dann eine Nummer aus diesem Zahlenbereich zugewiesen bzw. soll dann eine nummer davon bearbeiten z.B. ausgeben.

Wie muss ich mein Programm anpassen damit das so funktioniert? Vielen Dank!!!

Nimda05

Soweit bin ich schon:
Code:
int  iStart = 0;

void *thread_func(void *args){

       cout<< ??????????
}
int main(int argc, char *argv[]) {

	

	int MAX_THREADS = 10;

	pthread_t tid[MAX_THREADS];
	int i = 0;

	for(; iStart <=25000000; iStart++){

		i_check(iStart);
		for(; i < MAX_THREADS; i++){

			pthread_create(&tid[i], NULL, thread_func, NULL);	
		}
		if( i == MAX_THREADS){
	
			for(int x = 0; x < MAX_THREADS; x++){
				
				pthread_join(tid[x], NULL);
				
			}
		}
		i = 0;
	}
	return EXIT_SUCCESS;


}
 
Erst einmal solltest du etwas Sinnvolles von cout ausgeben lassen ;)
Vielleicht helfen dir folgende Links weiter:
#1
#2
:)

PS: Musst aber auch schön herunterscrollen und alles lesen :rolleyes:
 
Hallo!

Mein Programm mit den mehreren Threads greift auf eine Datei zu. Kann ich irgendwie den Zugriff auf die Datei für alle anderen Threads sperren wenn ein thread gerade die datei geöffnet hat?

Danke

Nimda05
 
hallo!

naja aber wenn ich so sperre ich doch nur den zugriff auf eine variable oder nicht? bzw wenn ich das ganze über mutex locke dann sperre ich doch nur für das ganze programm den zugriff auf die datei. ich würde aber gerne zusätzlich noch die datei für alle anderen dateien sperren. das geht auch. das weiss ich nur ich weiss leider nicht mehr wie xD

Hilfe? ^^

Nimda05
 
Hi Nimda05,

Mein Programm mit den mehreren Threads greift auf eine Datei zu. Kann ich irgendwie den Zugriff auf die Datei für alle anderen Threads sperren wenn ein thread gerade die datei geöffnet hat?

wenn du anfaengst mit threads zu arbeiten sollten du dich auf jeden Fall auch mit Semaphoren/Mutex auseinandersetzten.

Ich bin in der C Syntax nicht so fit, deshalb kann ich dir zu deinem code kein Beispiel basteln, aber was du vor hast laesst sich, wie bereits erwaehnt, uber einen Mutex bzw. eine Semaphore mit dem Wert 1 regeln.

naja aber wenn ich so sperre ich doch nur den zugriff auf eine variable oder nicht?

Nicht zwingend, du kannst analog dazu auch den Aufruf der Datei ueber eine Semaphore regeln.

Dazu musst du alle Stellen im code an denen auf die Datei zugegriffen wird (lesen/schreiben) mit eben dieser Semaphore "schuetzen".

Code:
Pseudo code:

Global: 
Semaphore schutz(1);

tread1:
schutz.P;
// von Datei lesen
schutz.V;

thread2:
schutz.P;
// in Datei schreiben
schutz.V;

Wenn nun ein thread gerade etwas von der Datei liesst, muessen andere threads warten bis die Semaphore 'schutz' wieder frei wird, usw.


hf
 
Zurück
Oben