/ / Може ли да се приеме, че методът get-to be safe-thread, ако не е отбелязано друго? - C ++, безопасност на коне, метод за подготовка

Може ли да се предположи, че методът за получаване на конец е безопасен, ако не е отбелязано друго? - C ++, безопасност на коне, метод за подготовка

Може ли да се приеме по принцип безопасността на конецаако не е отбелязано друго в документацията на метода? Или в противен случай човек никога не би трябвало да поеме защитата на конеца, ако не е отбелязано друго? Какво мислиш?

редактиране:

Да приемем клас

class InfoClass {
public:
void Init();
int  GetInfo();
void Free();
};

повикване Init() веднъж, GetInfo() от контекст с резба, и Free() след приключването на резбованите операции.

Отговори:

4 за отговор № 1

Тема безопасност винаги изисква допълнителна работа, така че единственото нещо, което може безопасно да приемете, е обратното - при липса на пряка подкрепа нишката е сигурна не поддържа.

Обяснение:

Да предположим, че имате getter за проста 64-битова версия long long и работят на 32-битова архитектура. Докато компютърът извлича втората половина от тази дълга 64-битова стойност (току-що е направено с първата половина), друга нишка актуализира тази втора половина и сега това, което имате, е несъответствие - затова не е безопасно за нишката.

редактиране (за да съответства на редакцията в въпроса):

(странична бележка - начинът, по който представихте класа си, го прави неизползваем, тъй като всички членове са частни)

Ако нямате който и да е методи за достъп, които променят състоянието на вашия клас, след като са били построени тогава мога поемайте безопасността на конеца. Но това все още е склонен наклон, тъй като по-късно някой, който не знае за вашето предположение, може да добави setter в класа и да преживеете прекрасно пътуване в опит за отстраняване на грешки при случайна грешка;)


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 метода, резултатът ще бъде боклук. Така че, освен ако не е посочено, безопасността на конеца не може да се приеме.