2017-11-29 20 views
-2

Ich habe paralleles Programm. Auf jedem Thread a ist eine Sequenz von Bits in einem char * gespeichert.
Mein Gehirn wird seg Fehler, wenn ich darüber nachdenke, wie man diese Bits in eine Datei schreibt. Die Bits vom ersten Thread bis zu den Bits vom zweiten usw. ohne die 0 müssen volle Bytes haben.Bit-Sequenzen aus Threads in Reihenfolge schreiben

Ich ein Beispiel wird sehr nützlich sein. Die Daten nicht Diese kleine es 100MB sein kann
Gewinde 1: 13 Bits 1011 1111 0110 0 (000), weil ich nicht 13 Bits speichern kann, i 2 Bytes
Gewinde 2 speichern kann: 9 Bits 1001 1011 0 (000 0000)
Gewinde 3: 7 Bits 1011 111 (0)
Gewinde 4: 5 Bit 0001 1 (000)

Frage: Wie kann ich kann ich das Endergebnis in einer Datei zu erhalten oder char * als das?
1011 1111 0110 0100 1101 1010 1111 1000 11 (00 0000)

Wenn i setzen kann hilft \‘, wenn die Bits von einem anderen Thread kommen
1011 1111 0110 1101 0'100 10'10 1111 1 '000 11 (00 0000)

+1

Sie haben nicht wirklich eine Frage gestellt. Eine Datei ist per Definition ein Byte-Stream. –

+0

Die Daten sind klein genug, Sie können wahrscheinlich alles an einen Sammler übergeben, der die Datei schreibt. Sonst können Sie ein Token haben, das bei Thread 1 beginnt, und sobald er schreibt, übergibt er das Token an Thread 2 ... Hier kann Token nur eine Nachricht sein, die zum Synchronisieren der Schreibvorgänge verwendet wird ... oder eine gemeinsame Variable, die nur ist geschrieben von einem Thread, wenn der aktuelle Wert mit der Thread-Nummer übereinstimmt. – lockcmpxchg8b

Antwort

1

Sie können Datei-I/O nicht direkt aus den Threads ausführen, da dies keine Synchronisierung ausführen würde und die Dinge nicht in der richtigen Reihenfolge enden würden.

Wenn Sie im Voraus wissen, wie viele Bits jeder Thread generieren kann, würde ich den Speicher einfach im übergeordneten Prozess reservieren und jedem Thread seinen Arbeitsbereich übergeben. Wenn die Threads dann verbunden sind, kann der Elternprozess die Daten in der richtigen Reihenfolge schreiben.

+0

lässt sagen, ich weiß genau die Anzahl der Bits von jedem Thread erzeugt. Ich bin nicht sicher, ob ich die Reihenfolge der Bits (nicht nur 8 Bits, aber Hunderte von Bytes) leicht verschieben kann, oder ich sollte die ersten Bits von Thread 2 behalten, die die Lücke von Thread 1 und die anderen Bits von Thread 2 in Bytes füllen –

Verwandte Themen