Отследить удаление потока (без pthread_cleanup_push)

Тема в разделе "WASM.UNIX", создана пользователем DevilDevil, 2 июн 2020.

  1. DevilDevil

    DevilDevil Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    101
    Я разрабатываю менеджер памяти. Ядро на Си (Clang), а API обвязка уже на конечном языке. Сейчас это Delphi/FreePascal, потом будут заголовочники для попуряных C/C++ компиляторов.

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

    В Windows я это делаю с помощью фиберов. Гуглил POSIX, там говорят, есть
    pthread_cleanup_push.

    Но во-первых, у нас в хедерах Delphi нет этого макроса. Во-вторых, судя по всему, он обязан работать в паре с pthread_cleanup_pop, т.е. имеет временный характер: https://godbolt.org/z/FB564h

    Всё, что я нашёл, это две функции:
    https://www.man7.org/linux/man-pages/man3/pthread_setcancelstate.3.html
    https://www.man7.org/linux/man-pages/man3/pthread_setcanceltype.3.html

    Но нигде не видно, как можно указать колбек
    Подскажите, пожалуйста, что делать
     
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    pthread_setcancelstate/pthread_setcanceltype - это совсем не то, что вам нужно.
    pthread_cleanup_push больше похоже на правду. То, что его нет в Delphi - ну лично ваши проблемы с Delphi.
     
    Rel нравится это.
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    Но во-первых, не у вас в Дельфи, а у вас во ФриПаскале. А во-вторых, что мешает вам в ваших Дельфях и ФриПаскалях объявить ее руками по сишному прототипу?