参考链接:https://www.codeproject.com/Articles/12362/A-quot-synchronized-quot-statement-for-C-like-in-J
代码:
#include <iostream>
#include <cstdio>
#include <pthread.h>
using namespace std;
#define synchronized(M) for(Lock M##_lock = M; M##_lock; M##_lock.setUnlock())
int thread_count = 2;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
class Lock
{
public:
Lock(pthread_mutex_t &mutex): m_mutex(mutex), m_locked(true)
{
pthread_mutex_lock(&m_mutex);
}
~Lock()
{
pthread_mutex_unlock(&m_mutex);
}
void setUnlock()
{
m_locked = false;
}
operator bool () const
{
return m_locked;
}
private:
pthread_mutex_t &m_mutex;
bool m_locked;
};
void *produce(void *arg)
{
for(int i = 0; i < 10; ++i)
{
synchronized(mutex)
{
for(char c = 'A'; c <= 'Z'; ++c)
{
cout << c;
}
cout << endl;
}
}
thread_count--;
return NULL;
}
int main(int argc, char* args[])
{
pthread_t tid_1, tid_2;
pthread_create(&tid_1, NULL, produce, NULL);
pthread_create(&tid_2, NULL, produce, NULL);
while(thread_count) sleep(0);
getchar();
return 0;
}