Я наблюдаю неожиданное поведение при использовании pthread_getattr_default_np () в сочетании с pthread_attr_setaffinity_np () on linux.
I переопределяет атрибуты потока по умолчанию с использованием cpute stribine с использованием c -cpu. Позже я получаю атрибуты по умолчанию с помощью pthread_getattr_default_np () , а затем изменяю аффинность ЦП, возвращаемого pthread_attr_t . Удивительно, но эта модификация, по -видимому, изменяет глобальную по умолчанию - хотя я никогда не вызываю pthread_setattr_default_np () снова.
Я использовал pthread_setattr_default_np () , чтобы установить атрибут потока по умолчанию с аффинностью CPU CPU. После этого я позвонил в pthread_getattr_default_np () , чтобы получить копию атрибутов по умолчанию в переменную (attr1). Затем я изменил аффинность процессора ATRT1 на CPU 3. Я предположил, что pthread_getattr_default_np () вернет правильную копию по умолчанию, поэтому изменение, это не повлияет на что -либо еще.attr2), я заметил, что у него также был только установлен CPU 3 - хотя я никогда не изменял attr2 напрямую. Это заставило меня думать, что по умолчанию может быть изменено непреднамеренно, когда я изменяю сродство ATTR1 .
Вот пример кода:
#include
#include
void display_pthread_attr(pthread_attr_t* attr, const char* label)
{
cpu_set_t cpuset;
int ret = pthread_attr_getaffinity_np(attr, sizeof(cpu_set_t), &cpuset);
if (ret != 0)
{
printf("%s: Failed to get CPU affinity (error %d)\n", label, ret);
return;
}
printf("%s CPU SET: ", label);
for (int i = 0; i < CPU_SETSIZE; ++i)
{
if (CPU_ISSET(i, &cpuset))
{
printf("%d ", i);
}
}
printf("\n");
}
void overrideDefaultThreadAttribute() {
pthread_attr_t* attribute = new pthread_attr_t;
pthread_attr_init(attribute);
cpu_set_t cpuSet;
pthread_getaffinity_np(pthread_self(), sizeof(cpuSet), &cpuSet);
pthread_attr_setaffinity_np(attribute, sizeof(cpu_set_t), &cpuSet);
pthread_setattr_default_np(attribute);
display_pthread_attr(attribute, "OverrideDefaultThreadAttribute");
}
int main() {
overrideDefaultThreadAttribute();
pthread_attr_t attr1, attr2;
pthread_getattr_default_np(&attr1);
display_pthread_attr(&attr1, "Default attr1");
// Modify attr1
cpu_set_t cpus;
CPU_ZERO(&cpus);
CPU_SET(3, &cpus);
pthread_attr_setaffinity_np(&attr1, sizeof(cpu_set_t), &cpus);
display_pthread_attr(&attr1, "attr1 pinned to 3");
// Get another default attribute
pthread_getattr_default_np(&attr2);
display_pthread_attr(&attr2, "Default attr2");
}
< /code>
output: < /p>
OverrideDefaultThreadAttribute CPU SET: 0 1 2 3 4 5 6 18 19 20 21 22 23 24
Default attr1 CPU SET: 0 1 2 3 4 5 6 18 19 20 21 22 23 24
attr1 pinned to 3 CPU SET: 3
Default attr2 CPU SET: 3
Подробнее здесь: https://stackoverflow.com/questions/796 ... affect-the
Почему изменение pthread_attr_t из pthread_getattr_default_np () влияет на атрибуты по умолчанию? ⇐ Linux
1750858752
Anonymous
Я наблюдаю неожиданное поведение при использовании pthread_getattr_default_np () в сочетании с pthread_attr_setaffinity_np () on linux.
I переопределяет атрибуты потока по умолчанию с использованием cpute stribine с использованием c -cpu. Позже я получаю атрибуты по умолчанию с помощью pthread_getattr_default_np () , а затем изменяю аффинность ЦП, возвращаемого pthread_attr_t . Удивительно, но эта модификация, по -видимому, изменяет глобальную по умолчанию - хотя я никогда не вызываю pthread_setattr_default_np () снова.
Я использовал pthread_setattr_default_np () , чтобы установить атрибут потока по умолчанию с аффинностью CPU CPU. После этого я позвонил в pthread_getattr_default_np () , чтобы получить копию атрибутов по умолчанию в переменную (attr1). Затем я изменил аффинность процессора ATRT1 на CPU 3. Я предположил, что pthread_getattr_default_np () вернет правильную копию по умолчанию, поэтому изменение, это не повлияет на что -либо еще.attr2), я заметил, что у него также был только установлен CPU 3 - хотя я никогда не изменял attr2 напрямую. Это заставило меня думать, что по умолчанию может быть изменено непреднамеренно, когда я изменяю сродство ATTR1 .
Вот пример кода:
#include
#include
void display_pthread_attr(pthread_attr_t* attr, const char* label)
{
cpu_set_t cpuset;
int ret = pthread_attr_getaffinity_np(attr, sizeof(cpu_set_t), &cpuset);
if (ret != 0)
{
printf("%s: Failed to get CPU affinity (error %d)\n", label, ret);
return;
}
printf("%s CPU SET: ", label);
for (int i = 0; i < CPU_SETSIZE; ++i)
{
if (CPU_ISSET(i, &cpuset))
{
printf("%d ", i);
}
}
printf("\n");
}
void overrideDefaultThreadAttribute() {
pthread_attr_t* attribute = new pthread_attr_t;
pthread_attr_init(attribute);
cpu_set_t cpuSet;
pthread_getaffinity_np(pthread_self(), sizeof(cpuSet), &cpuSet);
pthread_attr_setaffinity_np(attribute, sizeof(cpu_set_t), &cpuSet);
pthread_setattr_default_np(attribute);
display_pthread_attr(attribute, "OverrideDefaultThreadAttribute");
}
int main() {
overrideDefaultThreadAttribute();
pthread_attr_t attr1, attr2;
pthread_getattr_default_np(&attr1);
display_pthread_attr(&attr1, "Default attr1");
// Modify attr1
cpu_set_t cpus;
CPU_ZERO(&cpus);
CPU_SET(3, &cpus);
pthread_attr_setaffinity_np(&attr1, sizeof(cpu_set_t), &cpus);
display_pthread_attr(&attr1, "attr1 pinned to 3");
// Get another default attribute
pthread_getattr_default_np(&attr2);
display_pthread_attr(&attr2, "Default attr2");
}
< /code>
output: < /p>
OverrideDefaultThreadAttribute CPU SET: 0 1 2 3 4 5 6 18 19 20 21 22 23 24
Default attr1 CPU SET: 0 1 2 3 4 5 6 18 19 20 21 22 23 24
attr1 pinned to 3 CPU SET: 3
Default attr2 CPU SET: 3
Подробнее здесь: [url]https://stackoverflow.com/questions/79679144/why-does-modifying-a-pthread-attr-t-from-pthread-getattr-default-np-affect-the[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия