2015-11-29 6 views
0

Привет, у меня есть пример, который создает 2 потока. Мой вопрос заключается в том, когда я вывожу значения, которые он всегда печатает 1000 до 999. Возможно ли напечатать 999 до 1000. Просто хотите знать, как они упорядочены?Threadlocal values ​​iList ordering

static void Main(string[] args) 
    { 
     ThreadLocal<int> field = new ThreadLocal<int>(() => 0, true); 



     Thread firstThread = new Thread(new ThreadStart(() => 
     { 

      field.Value = 999; 
     })); 
     Thread secondThread = new Thread(new ThreadStart(() => 
     { 

      field.Value = 1000; 
     })); 


     firstThread.Start(); 
     secondThread.Start(); 


     firstThread.Join(); 
     secondThread.Join(); 

     IList<int> valueList = field.Values; 

     foreach (int arr in valueList) 
      Console.WriteLine(arr); 


     Console.Read(); 
    } 
+0

Нитки работают параллельно, нет гарантии, которая будет выполняться первой. – Cyral

ответ

0

Как правило, вы не должны писать многопоточный код, из которого зависят потоки.

Но ваше требование может быть достигнуто с Семафор/WaitHandle

//Creates semaphore with 1 possible owner and the owner slot taken 
var sema = new Semaphore(1, 1); 

Thread firstThread = new Thread(new ThreadStart(() => 
{ 
     //Value set and sema is released, if this thread calls release 
     //before `secondThread` attempts to acquire then there will be no stalling 
     field.Value = 999; 
     sema.Release(); 
})); 

Thread secondThread = new Thread(new ThreadStart(() => 
{ 
     sema.WaitOne(); 
     field.Value = 1000; 
})); 

Есть чтения этой книги (The Little Book семафоров): Глава 3 - Основные схемы синхронизации для получения дополнительной информации о базовой сигнализации/в режиме ожидания : http://www.greenteapress.com/semaphores/downey08semaphores.pdf

 Смежные вопросы

  • Нет связанных вопросов^_^