multithreading und strtok

8

Ich werde Strings in einer Multithread-Anwendung kontinuierlich aufteilen. Ich habe gelesen, dass strtok dafür nicht geeignet ist, aber warum?

Sollte ich einen Semaphor um den Teil meines Codes verwenden, der strtok aufruft?

    
andandandand 30.11.2010, 05:06
quelle

3 Antworten

9

Sie sollten in Erwägung ziehen, strtok oder strtok_r überhaupt nicht zu verwenden. Es ist trivial, ähnliche Funktionen wie diese zu schreiben, aber besser auf die Art und Weise zugeschnitten, wie Sie sie verwenden möchten. Natürlich muss der Aufrufer den gesamten Status speichern und einen Zeiger auf den Status für Thread-Sicherheit / Neueintritt übergeben. p>

Was Ihre Frage zur Verwendung eines Semaphors (oder eines anderen Sperr-Primitivs) bei Aufrufen von strtok betrifft, hilft das nicht, wenn Sie es einfach um den tatsächlichen Aufruf herumlegen. Sie müssen die Sperre während des gesamten Analyseprozesses der Zeichenfolge beibehalten, um den internen Status von strtok zu schützen. Ich glaube, das ist, was viele Leute als Sperrcode anstelle von Daten bezeichnen und es wird allgemein als A Bad Thing betrachtet.

    
R.. 30.11.2010, 05:33
quelle
7

Verwenden Sie strtok_r () für die Thread-Sicherheit.

    
fastcodejava 30.11.2010 05:08
quelle
3

Sie müssen strtok_r verwenden.

In einigen nicht standardmäßigen Implementierungen (am häufigsten von Microsoft) speichert strtok seine Werte in TLS (threadlokaler Speicher), daher sollte es in Ordnung sein, sie in mehreren Threads gleichzeitig zu verwenden. Sie können jedoch Ihre Tokenization für ein und dieselbe Zeichenfolge nicht über mehrere Threads aufteilen.

    
EboMike 30.11.2010 05:09
quelle

Tags und Links