Учитывая следующую ситуацию:Как подождать, пока другой поток начнет инициализировать и правильно очистится?
2 потока, где 1 следует инициализировать некоторые данные, которые требуют неопределенного количества времени, а другой поток должен ждать этого.
Проблемы у меня есть:
- Я ничего не могу сделать, прежде чем любой из этих двух потоков работает, так как я не имею контроля над процессом нерестового (код C компилируется и выполняется в сценарии как мода).
- Я не знаю, достигнет ли поток инициализации какой-либо точки в коде перед другим потоком, поскольку они запускаются сразу после друг друга, и из этого одного порядка выполнения становится неопределенным с моей точки зрения
- Мне нужно убедитесь, что первая часть основного потока выполняется первой (например, другой поток не должен пытаться использовать неинициализированный)
- Я хочу очистить все, что я использую для этой синхронизации, после этого, поскольку это одноразовая вещь в длинном когда даже очень небольшая экономия на памяти. Например. мьютекс/семафор следует уничтожить впоследствии.
Как это сделать?
Редактировать: Возможно, это не так несущественно, что я (к сожалению) оставил вне первоначального вопроса: у меня есть доступ к некоторым указателям, к которым можно получить доступ из всех потоков, и при запуске должно быть NULL, поэтому это, вероятно, поможет с синхронизацией ,
Редактирование 2: Через эксперименты я обнаружил, что «другая нить» на самом деле всегда порождена, и функция вызывается и должна возвращаться до начала основного потока. К сожалению, я должен подождать в этот момент, чтобы основной поток завершил работу, что делает невозможным все это. Таким образом, теперь вопрос можно считать теоретическим (и, надеюсь, снова практическим, как только поставщик программного обеспечения изменит это или предоставит ему возможность работать)
Также добавлен g-wan (веб-сервер, выполняющий c скрипты как сценарий сервлетов/обработчика/обслуживания) - изначально я не хотел добавлять этот тег, поскольку вопрос не является специфическим для программного обеспечения, но, как кажется, он может помочь понять «почему», а также обстоятельства; «Основной» поток в моем случае - это сценарий обслуживания, а «другой поток» - обработчик соединения.
Моя проблема была «решена» при поддержке/помощи от поставщика программного обеспечения, так что я буду принимать pthread_cond_wait ответ на этот момент, как это вообще правильно, насколько я могу сказать.
Почему это отдельный поток, если другой должен его ждать? –
Я бы предложил вам сделать все инициализацию в основной теме, прежде чем вы начнете вторую. Нет смысла иметь два, если они просто ждут друг друга. –
Как указано в вопросе, я не контролирую процесс нереста. – griffin