Я здесь не для того, чтобы сообщать об ошибках или чем-то в этом роде, поэтому теперь, когда был введен этот небольшой контекст, давайте перейдем к моему собственно вопросу.
Что касается архитектуры моего программного обеспечения, Мне нужен идентификатор потока. Поток мог быть создан на основе библиотек C или C++. Я это не контролирую. Функция (обратный вызов), которую я написал (то есть некоторый код, которым я управляю), вызывается из такого потока. Мне нужно получить идентификатор потока из этого обратного вызова.
Требования к идентификатору моего потока:
- Идентификатор должен быть быть уникальным (два активных потока не могут иметь один и тот же идентификатор).
- Ничего страшного, если идентификаторы перезапускаются после прекращения потока.
- Мне нужно быть уникальным возможность «сериализовать» этот идентификатор в структуре C. Как в... memcpy() из идентификатора даст еще одну значимую копию того же идентификатора (идентификаторы сравниваются равными), пока базовый поток остается активным (как я уже говорил ранее, перезапуск идентификаторов потоков после того, как потоки die не являются проблемой для моей архитектуры).
Еще немного контекста: I' Я создаю песочницу для перца во FreeBSD (я делаю что-то очень похожее в Linux с Landlock+seccomp, поэтому проблемы с glibc/libstdc++ также важны для меня... отсюда и этот вопрос), но я хочу повторно использовать существующие библиотеки C/C++. Capsicum полностью отключает внешний авторитет. Я обертываю функции libc, которые получают ресурсы от внешних источников. Мои переопределения функций libc отправляют сообщения через безымянный сокет UNIX супервизору, который находится за пределами «песочницы». Поскольку любой поток может использовать эти функции, запрос включает идентификатор потока (следовательно, необходимо иметь возможность сериализовать идентификатор потока в структуре C) и блокирует поток до тех пор, пока не будет получен соответствующий ответ.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -c-threads
Мобильная версия