Може ли да се приеме по принцип безопасността на конецаако не е отбелязано друго в документацията на метода? Или в противен случай човек никога не би трябвало да поеме защитата на конеца, ако не е отбелязано друго? Какво мислиш?
редактиране:
Да приемем клас
class InfoClass {
public:
void Init();
int GetInfo();
void Free();
};
повикване Init()
веднъж, GetInfo()
от контекст с резба, и Free()
след приключването на резбованите операции.
Отговори:
4 за отговор № 1Тема безопасност винаги изисква допълнителна работа, така че единственото нещо, което може безопасно да приемете, е обратното - при липса на пряка подкрепа нишката е сигурна не поддържа.
Обяснение:
Да предположим, че имате get
ter за проста 64-битова версия long long
и работят на 32-битова архитектура. Докато компютърът извлича втората половина от тази дълга 64-битова стойност (току-що е направено с първата половина), друга нишка актуализира тази втора половина и сега това, което имате, е несъответствие - затова не е безопасно за нишката.
редактиране (за да съответства на редакцията в въпроса):
(странична бележка - начинът, по който представихте класа си, го прави неизползваем, тъй като всички членове са частни)
Ако нямате който и да е методи за достъп, които променят състоянието на вашия клас, след като са били построени тогава мога поемайте безопасността на конеца. Но това все още е склонен наклон, тъй като по-късно някой, който не знае за вашето предположение, може да добави set
ter в класа и да преживеете прекрасно пътуване в опит за отстраняване на грешки при случайна грешка;)
4 за отговор № 2
Мисля, че трябва да приемеш, че методът е not thread-safe
ако не е казано друго.
Всъщност не виждам причина да предполагам, че метод е thread-safe
по подразбиране.
2 за отговор № 3
Един метод може да бъде безопасен за конеца, но отново не е задължително. Ако има клас:
class A {
int value;
int getValue() {
return value;
}
void processValue() {
value += 2;
value = value*2;
}
}
В горния код, getValue
не е безопасно за нишката, тъй като може да се нарече, когато друга нишка е на втория ред processValue
и следователно променливата value
в несъгласувано състояние. Така че получателят тук е отново (отново, това може и да не е така), но все още не е безопасно.
Както другите споменаха по тази тема, освен ако не е посочено, предположи, че не е безопасно за нишката.
0 за отговор № 4
Ако променливата се актуализира с помощта на set
когато се обаждате get
метода, резултатът ще бъде боклук. Така че, освен ако не е посочено, безопасността на конеца не може да се приеме.