подцепите многопоточную программу на вилку

Используйте java.lang.String.format(String,Object...) как это:

String.format("%05d", yournumber);

для дополнения нуля с длиной 5. Поскольку шестнадцатеричный вывод заменяет d x как в "%05x".

полные параметры форматирования документируются как часть java.util.Formatter .

23
задан jimx 5 August 2009 в 20:18
поделиться

2 ответа

Проблема с разветвлением, когда у вас есть несколько запущенных потоков, заключается в том, что вилка копирует состояние ЦП только одного потока, который его вызвал. Это как если бы все другие потоки просто умерли, мгновенно, где бы они ни находились.

В результате блокировки не снимаются, а общие данные (например, куча malloc) могут быть повреждены.

pthread предлагает функцию pthread_atfork - теоретически вы можете взять каждую блокировку в программе перед разветвлением, освободить их после и , возможно, выжить - но это рискованно, потому что вы можете всегда скучаю по одному. И, конечно же, стеки других потоков не будут освобождены.

17
ответ дан 29 November 2019 в 03:04
поделиться

Это действительно довольно просто . Проблемы с несколькими потоками и процессами всегда возникают из-за общих данных. Если общих данных нет, то проблем возникнуть не может.

В вашем примере общие данные - это очередь, принадлежащая основному потоку - здесь возникнут любые потенциальные состязания или состояния гонки. Типичные методы «решения» этих проблем включают схемы блокировки - рабочий поток блокирует очередь перед вставкой любых данных,

0
ответ дан 29 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: