using System;
using System.Threading;
namespace Threading
{
class Program
{
    static void Main(string[] args)
    {
        Semaphore even = new Semaphore(1, 1);
        Semaphore odd = new Semaphore(1, 1);
        Thread evenThread = new Thread(() =>
        {
            for (int i = 1; i <= 100; i++)
            {
                even.WaitOne();
                if(i % 2 == 0)
                {
                    Console.WriteLine(i);
                }
                odd.Release();
            }
        });
        Thread oddThread = new Thread(() => 
        {
            for(int i = 1; i <=100; i++)
            {
                odd.WaitOne();
                if(i%2 != 0)
                {
                    Console.WriteLine(i);
                }
                even.Release();
            }
        });
        oddThread.Start();
        evenThread.Start();
    }
}
}
So I have written this code where one thread is producing Odd numbers and other is producing even numbers.
Using Semaphores I have made sure that they print numbers in orders and it works perfectly.
But I have a special situation in mind, for example each thread waits until the other thread releases its semaphore. So can there be a condition where both threads are waiting and no thread is making any progress and there is a deadlock situation ?