Можно ли вызывать pthread_exit из main?

Обновление: Пожалуйста, взгляните на комментарии - этот ответ не соответствует вашему вопросу, но, возможно, он отвечает на другие вопросы пользователей, которые натолкнулись (я думаю, что из-за upvotes), поэтому я не буду удалять это " answer ":

Сначала: я знаю, что этот вопрос действительно устарел, но я искал именно эту проблему, и эта публикация была опубликована в Google # 1. Поэтому я реализовал версию docs.filter (принятый ответ), но, как я читал в mongoose v4.6.0 docs , мы теперь можем просто использовать:

Item.find({}).populate({
    path: 'tags',
    match: { tagName: { $in: ['funny', 'politics'] }}
}).exec((err, items) => {
  console.log(items.tags) 
  // contains only tags where tagName is 'funny' or 'politics'
})

Надеемся, что это поможет будущему пользователей поисковой системы.

13
задан user429788 24 August 2010 в 17:55
поделиться

2 ответа

Ну, это определенно допустимо в реализации pthreads в Linux, см. раздел примечаний в pthreads_exit. В нем говорится

Чтобы другие потоки могли продолжить выполнение, основной поток должен завершиться. вызвав pthread_exit(), а не exit(3).

Кроме того, просмотр исходного кода здесь (до конца) показывает, что он приблизительно переводится как _endthread или _endthreadex. Документация здесь для тех, кто не упоминает о том, чтобы не вызывать его в начальном потоке.

16
ответ дан 1 December 2019 в 19:30
поделиться

Это полностью законное и преднамеренное поведение. Весь процесс завершается только тогда, когда завершаются все потоки или exit вызывается явно или неявно.

Обычный возврат из main эквивалентен вызову exit . Если вы завершите main с помощью pthread_exit , вы прямо скажете, что хотите, чтобы другие потоки продолжались.

15
ответ дан 1 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

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