создайте новую таблицу, которую вы хотите, с правильными типами столбцов и индексами. (скрипт из старой таблицы и изменение имени.)
вставить в новую таблицу (список столбцов) выберите * из old_table;
переименуйте old_table old_table_back, переименуйте new_table old_table.
создайте старые индексы в новой таблице, оставьте любые ограничения ri на старой таблице и создайте их в новой таблице. Опять же, ваши rdbms будут иметь простой способ генерации скриптов для этого.
Используйте функцию prctl(2)
с опцией PR_SET_NAME
(см. документацию).
Обратите внимание, что документация немного запутана. Они говорят
Установить имя процесса для вызывающего процесса
но поскольку в Linux потоки - это легковесные процессы (LWP), один поток - это один процесс в данном случае.
Вы можете увидеть имя потока с помощью ps -o cmd
или с помощью:
cat /proc/$PID/task/$TID/comm
или между ()
из cat /proc/$PID/task/$TID/stat
:
4223 (kjournald) S 1 1 1 0...
или из GDB info threads
между двойными кавычками:
* 1 Thread 0x7ffff7fc7700 (LWP 6575) "kjournald" 0x00007ffff78bc30d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
Вы можете реализовать это самостоятельно, создав сопоставление словаря pthread_t
в std :: string
, а затем связав результат ] pthread_self () с именем, которое вы хотите присвоить текущему потоку. Обратите внимание: если вы это сделаете, вам нужно будет использовать мьютекс или другой примитив синхронизации, чтобы предотвратить одновременное изменение словаря несколькими потоками (если ваша реализация словаря уже не делает это за вас). Вы также можете использовать переменные, зависящие от потока (см. pthread_key_create , pthread_setspecific , pthread_getspecific и pthread_key_delete , чтобы сохранить имя)). текущий поток; однако вы не сможете получить доступ к именам других потоков, если сделаете это (тогда как со словарем вы можете перебирать все пары идентификаторов / имен потоков из любого потока).