세줄요약
- 스레드끼리 지역변수를 매개변수로 전달 가능
- 스레드끼리 변수 하나를 스태틱으로 공유 가능
- 스레드끼리 지역변수 하나를 매개변수로 공유.... 하고싶음 ㅜㅜ
코드를 작성하고 실행하는데, 작업이 오래 걸리기 시작했습니다.
처음 10초 정도는 괜찮았습니다.
15초 후 불안해집니다.
20초가 넘어 가자 뭔가 잘못되어가고 있는 게 아닌지, 내가 이 일로 회사에서 짤리지는 않을지 조마조마해집니다.
저는 이 일이 제대로 돌아가고 있는지 확인해 주는 스레드를 만들기로 했습니다.
그런데 스레드A 의 변수를 스레드B 에서 출력할 수 있을까요?
가능합니다!
1. 스레드 간 값 전달 방식
public static void Main(string[] args)
{
int count = 1;
Thread thread = new Thread(Print);
thread.Start(count);
}
static void Print(object count)
{
Console.WriteLine((int)count);
}
1
눈치 채셨나요 ㅎㅎ 사실 이 방법으로는 값만 전달이 가능하고, 레퍼런스로는 전달할 수 없습니다.
매개변수로 받은 값은 기존의 값이 변함에 따라 함께 변하지 않습니다.
2. 스태틱 변수 공유
이게 가장 쉬운 방식입니다!
private static int a = 0;
public static void Main(string[] args)
{
Thread t = new Thread(PrintA);
t.Start();
while (true)
{
// 0.1초마다 a++
Thread.Sleep(100);
a++;
}
}
private static void PrintA()
{
while (true)
{
// 1초마다 a 출력
Thread.Sleep(500);
Console.WriteLine("Value of a: " + a);
}
}
Value of a: 4
Value of a: 9
Value of a: 14
Value of a: 19
Value of a: 24
Value of a: 29
^C
하지만 지역 변수는 이 방식으로 공유할 수 없습니다.
3. 지역 변수를 레퍼런스로 공유
그런데 저는 지역 변수를 레퍼런스로 전달해서 공유하고 싶은데 ㅠㅠ 이 방법을 찾지 못했네요
지역 변수인데 외부로 공유를 바란다는것부터가 잘못된 생각인건가 싶기도 하고요
아시는 분이 있으시다면 댓글 부탁드립니다.
'Server > C# 비동기와의 전쟁' 카테고리의 다른 글
Task.Run vs await (0) | 2023.11.03 |
---|---|
내가 생각한 비동기 입력은 없었다 (1) | 2023.08.08 |
C# 이벤트 (LUA와 비교) (0) | 2023.06.09 |
스레드 종료를 기다리는 법 (Join, EventWaitHandle) (0) | 2023.05.22 |