<aside> ๐ ๋ชฉ์ฐจ
</aside>
<aside> ๐ก ๋์ค์ด์ ๋ธ๋ง - ์ฆ๊ฐ ์ฐ์ฐ์ ++ ํด๋น ๋ด์ฉ์ ๋ฏธ๋ฆฌ ์์งํ์๊ณ ..
๋ค์ ์ฝ๋๋ฅผ ๋ด ์๋ค
int32 sum = 0; // ์ ์ญ๋ณ์์
void Add()
{
for (int32 i = 0; i < 1'000'000; i++)
{
sum ++;
}
}
void Sub()
{
for (int32 i = 0; i < 1'000'000; i++)
{
sum--;
}
}
</aside>
<aside> ๐ก ๊ฒฐ๊ณผ๋ ๋น์ฐํ 0์ด๋ค
int main()
{
Add();
Sub();
cout << sum << endl;
}
</aside>
<aside> ๐ก ๊ฒฐ๊ณผ๋ ์คํ๋ง๋ค ๋ค๋ฅด๋ค
int main()
{
thread t1(Add);
thread t2(Sub);
if(t1.joinable()) t1.join();
if(t2.joinable()) t2.join();
cout << sum << endl;
}
์ ๋ด๊ฐ ์๋ ๋ํ๊ธฐ ๋นผ๊ธฐ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ๊ฐ?
</aside>
<aside> ๐ก ์ด ๋ฌธ์ ์ ํต์ฌ์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฐ์ํ๋ race condition์ ๋๋ค.
sequenceDiagram
participant ๋ฉ๋ชจ๋ฆฌ
participant ์ค๋ ๋1
participant ์ค๋ ๋2
๋ฉ๋ชจ๋ฆฌ->>๋ฉ๋ชจ๋ฆฌ: sum = 0
์ค๋ ๋1->>๋ฉ๋ชจ๋ฆฌ: sum ์ฝ๊ธฐ (0)
์ค๋ ๋2->>๋ฉ๋ชจ๋ฆฌ: sum ์ฝ๊ธฐ (0)
์ค๋ ๋1->>์ค๋ ๋1: ์ฆ๊ฐ (1)
์ค๋ ๋2->>์ค๋ ๋2: ๊ฐ์ (-1)
์ค๋ ๋1->>๋ฉ๋ชจ๋ฆฌ: sum ์ฐ๊ธฐ (1)
์ค๋ ๋2->>๋ฉ๋ชจ๋ฆฌ: sum ์ฐ๊ธฐ (-1)
๋ฉ๋ชจ๋ฆฌ->>๋ฉ๋ชจ๋ฆฌ: ์ต์ข
sum = -1 ๋๋ 1
Note over ๋ฉ๋ชจ๋ฆฌ,์ค๋ ๋2: ์์ ๊ฒฐ๊ณผ 0์ด ์๋
sum ๋ณ์์ ์ ๊ทผํฉ๋๋ค.sum++์ sum-- ์ฐ์ฐ์ด ํ ๋ฒ์ ์ด๋ฃจ์ด์ง์ง ์์ต๋๋ค. (์ฝ๊ธฐ, ์์ , ์ฐ๊ธฐ์ ์ธ ๋จ๊ณ๋ก ๊ตฌ์ฑ)<aside>
๐ก ๊ฒฐ๊ตญ, [์ฆ๊ฐ ์ฐ์ฐ์ (์ ์,ํ์ ์ฐ์ฐ)](https://cybecho.notion.site/5e2280c484414c779a6ffd1c2b2e4e02) ๋ ์๋ณธ๊ฐ์ ์ด๋๊ฐ์ ๊ฐ์ ธ๊ฐ๋ค๊ฐ, ๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ๋ค์ ์๋์๋ฆฌ๋ก ๋๋ ค๋์์?
๊ทผ๋ฐ ๊ฐ ์ค๋ ๋๊ฐ ์๋ ์๋ฆฌ๋ก ๋๋ ค๋๋ ๊ณผ์ ์์, ๋ ๋ค ๋์ผํ ์ฅ์์ ๊ฐ์ ธ๋ค๋๋ค๋ณด๋, ์๋ก๊ฐ ๋ณต์ฌํด๊ฐ๋ ์์ ํ๊ณ ๋ถ์ฌ๋ฃ๋ ์์ ์ด ์๋ก๋ค๋ฅด๊ธฐ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค!
์ด๊ฒ์ ๋ง์น git commit์ด ๊ผฌ์ธ๊ฒ๊ณผ ๊ฐ์์ํฉโฆ
์ด๋ฌํ ์ด์ ๋ก ๊ฐ์ ๋ฐ์ดํฐ ์์ญ์ ๊ณต์ ํ๋ค๋ฉด, ์๊ณ์์ญ์ ๋ช ํํ ํด์ผํ๋ค
</aside>