30/09/2018, 16:19
Làm sao để thể hiện được multithread?
Chào mọi người, em có một hàm tính tổng như sau : tính trung bình cộng của một phần tử với trung bình cộng là trung bình cộng của các phần tử nằm chung quanh nó trong một ma trận và dùng n thread để tính trung bình đó.
còn đây là code của em. Mọi người giúp em với. Em có đọc qua các bài về multithread như chưa hiểu cách để thể hiện được là chạy đúng như multithread
public void TinhTong()
{
int n = MT.GetLength(0);
int m = MT.GetLength(1);
TBCong = new double[n, m];
for (int i = 0; i < MT.GetLength(0); i++)
{
//Thread.Sleep(1000);
for (int j = 0; j < MT.GetLength(1); j++)
{
Thread.Sleep(1000);
if (i == 0 && j == 0)
TBCong[i, j] = (MT[i, j + 1] + MT[i + 1, j] + MT[i + 1, j + 1]) / 3;
else if (i == 0 && j == m - 1)
TBCong[i, j] = (MT[i, j - 1] + MT[i + 1, j] + MT[i + 1, j - 1]) / 3;
else if (i == n - 1 && j == 0)
TBCong[i, j] = (MT[i - 1, j] + MT[i - 1, j + 1] + MT[i, j + 1]) / 3;
else if (i == n - 1 && j == m - 1)
TBCong[i, j] = (MT[i - 1, j] + MT[i - 1, j - 1] + MT[i, i - 1]) / 3;
else if (i == 0 && j > 0 && j < m - 1)
TBCong[i, j] = (MT[i, j - 1] + MT[i + 1, j + 1] + MT[i + 1, j] + MT[i + 1, j + 1] + MT[i, j + 1]) / 5;
else if (i == n - 1 && j > 0 && j < m - 1)
TBCong[i, j] = (MT[i - 1, j - 1] + MT[i, j + 1] + MT[i - 1, j] + MT[i - 1, j + 1] + MT[i, j + 1]) / 5;
else if (j == 0 && i > 0 && i < m - 1)
TBCong[i, j] = (MT[i - 1, j] + MT[i - 1, j + 1] + MT[i, j + 1] + MT[i + 1, j + 1] + MT[i + 1, j]) / 5;
else if (j == m - 1 && i > 0 && i < m - 1)
TBCong[i, j] = (MT[i - 1, j - 1] + MT[i - 1, j] + MT[i, j - 1] + MT[i + 1, j - 1] + MT[i + 1, j]) / 5;
else if (i != 0 && j != 0 && i != n - 1 && j != m - 1)
TBCong[i, j] = (MT[i - 1, j - 1] + MT[i - 1, j] + MT[i - 1, j + 1] + MT[i, j - 1] + MT[i, j + 1] + MT[i + 1, j - 1] + MT[i + 1, j] + MT[i + 1, j + 1]) / 8;
}
}
}
Đây là chạy ở hàm main()
Thread[] thr = new Thread[5];
for(int i = 0; i<5; i++)
{
thr[i] = new Thread(new ThreadStart(Mythr.TinhTong));
//Thread.Sleep(1000);
Console.WriteLine("thr{0} hoan thanh", i+1);
}
foreach(Thread x in thr)
{
x.Start();
}
Em tạo ra 5 thread để thực hiện công việc tính trung bình đó.
Bài liên quan
Code e đưa lên thiếu thì fai ?
MT
là gì vậy e???A có ví dụ về MultiThread, e có thể tham khao ở đây.
Dạ, MT là mảng 2 chiều đọc từ file matran.text đó anh. Mà anh ơi, giả sử em có 10 hàm trong 1 class. giờ em muốn thực hiện 10 cái hàm đó, trong khi em tạo ra 5 thread trong vòng for. Liệu có thể thực hiện cái giả sư đó ko anh ? @tuancoi2506