Использование двух потоков для печати чисел, которые увеличивают время, а затем используют одиночный цикл для печати. Я знаю, что синхронизация увеличивает время, но в моем коде как увеличить время и остановить потоки для печати повторяющихся номеров? Там в любом случае ?Почему потоковое увеличение времени выполнения C#
class Program
{
public static int count=0;
public static List<string> numbers = new List<string>();
public static int semaphore=0;
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
numbers.Add(i.ToString());
}
Console.WriteLine("Before start thread");
Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1));
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread1));
tid1.Start();
tid2.Start();
}
}
public class MyThread
{
public static object locker = new object();
public static void Thread1()
{
for (; Program.count < Program.numbers.Count;)
{
lock (locker)
{
Console.WriteLine(Program.numbers[Program.count]);
Program.count++;
}
}
}
}
// Это быстрее, чем прошивка почему?
foreach (var item in numbers)
{
Console.WriteLine(item);
}
среднее время с резьбы и 1,5 мс цикл 0.6ms
Я знаю, что время растет в связи с ожиданием локона ресурса. В моем случае я должен использовать синхронизацию. Есть ли способ увеличить время выполнения? без синхронизации в моем коде? – phpnet
Ну, больше потоков, чем процессорные ядра, увеличивает время выполнения из-за переключения контекста, но не настолько. Если вы хотите избежать синхронизации, вызванные задержки, просто не используйте код потока, который требует синхронизации. Создайте приложение таким образом, чтобы все распараллеливаемые выполнялись без синхронизации. –
В моей проблеме вы можете придумать способ сделать это параллельно? – phpnet