#include <iostream>
#include <thread>
#include <condition_variable>
#include <mutex>
using namespace std;
mutex mtx;
condition_variable cv;
#define MAX_NUM 10
int x=1;

int evennum()
{
    while(true)
    {
    unique_lock<mutex> ul(mtx);
    cv.wait(ul, [](){
                return (x<=MAX_NUM) && (x%2==0);
    });

    cout<<"even num is "<<x<<endl;
    x++;
    ul.unlock();
    cv.notify_one();
    }
}

int oddnum()
{
    while(true)
    {
    unique_lock<mutex> ul(mtx);
    cv.wait(ul, [](){
                return (x<=MAX_NUM) && (x%2!=0);
    });

    cout<<"odd num is "<<x<<endl;
    x++;
    ul.unlock();
    cv.notify_one();
    }
}

int main() {

     thread t1(evennum);
     thread t2(oddnum);

     t1.join();
     t2.join();
    
    return 0;
}



/*

void evennum()
{
    while(true)
    {
    unique_lock<mutex> ul(mtx);
    cv.wait(ul, [](){
                return (x%2==0);
    });

    if(x>MAX_NUM)
    {
        cv.notify_one();
        return;
    }
    cout<<"even num is "<<x<<endl;
    x++;
    ul.unlock();
    cv.notify_one();
    }
}

void oddnum()
{
    while(true)
    {
    unique_lock<mutex> ul(mtx);
    cv.wait(ul, [](){
                return (x%2!=0);
    });

    if(x>MAX_NUM)
    {
        cv.notify_one();
        return;
    }

    cout<<"odd num is "<<x<<endl;
    x++;
    ul.unlock();
    cv.notify_one();
    }
}

*/

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: