Как спать или задерживать текущий поток в течение некоторого времени в C? [Дубликат]

Еще одно решение заключается в использовании коррелированного подзапроса:

select yt.id, yt.rev, yt.contents
    from YourTable yt
    where rev = 
        (select max(rev) from YourTable st where yt.id=st.id)

Наличие индекса (id, rev) делает подзапрос почти как простой поиск ...

Ниже приведены сравнения с решениями в ответе @ AdrianCarneiro (подзапрос, leftjoin), основанные на измерениях MySQL с таблицей InnoDB размером ~ 1 миллион записей, размер группы: 1-3.

Хотя для полной проверки таблицы подзапрос / leftjoin / коррелированные тайминги относятся друг к другу как 6/8/9, когда дело доходит до прямого поиска или партии (id in (1,2,3)), подзапрос намного медленнее, чем другие (из-за повторного ввода подзапроса). Тем не менее я не мог отличить левый и коррелированный решения от скорости.

Наконец, поскольку leftjoin создает n * (n + 1) / 2, объединяется в группы, на его производительность может сильно влиять размер групп ...

17
задан Shafik Yaghmour 29 June 2015 в 14:31
поделиться

2 ответа

Документ gcc C11 указывает, что он не поддерживает потоки, он говорит:

Threading [Необязательно] | Проблема с библиотекой (не реализована)

Как указывает документ, это не проблема gcc или clang, а проблема glibc. Как заметил Зак, это выглядит как , возможно, скоро будет работать , чтобы получить поддержку этого в glibc, но это не поможет вам сейчас. Вы можете использовать этот тем временем.

Исправлено для glibc 2.28

Согласно Ошибка 14092 - Поддержка потоков C11 , это будет фиксируется в glibc 2.8:

Реализовано вверх по потоку:

9d0a979 Добавить ручную документацию для threads.h 0a07288 nptl: Добавить тестовые примеры для потоков ISO C11 c6dd669 nptl: Добавить абилик символы для потоков C11 78d4013 nptl: Добавить потоки C11 tss_ * функции 918311a nptl: Добавить потоки C11 cnd_ * функции 3c20a67 nptl: Добавить C11 threads функции call_once 18d59c1 nptl: Добавить потоки C11 mtx_ * функции ce7528f nptl: Добавить потоки C11 thrd_ * функции

Он будет включен в 2.28.

16
ответ дан Shafik Yaghmour 28 August 2018 в 04:34
поделиться

Хотя потоки C11 еще не реализованы, потоки C ++ 11 реализованы и имеют схожие функции. Конечно, C ++ 11 может быть неприемлемым решением, и в этом случае ваши лучшие комментарии о потоках POSIX - ваша лучшая надежда.

2
ответ дан Jeff 28 August 2018 в 04:34
поделиться
Другие вопросы по тегам:

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