#include <stdio.h>
#include <pthread.h>
char buf[] = "1234567";
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* printThread(void* arg) {
while (1) {
pthread_mutex_lock(&mutex);
if (buf[0] == '1') {
printf("%s\n", buf);
}
pthread_mutex_unlock(&mutex);
}
return NULL;
}
void* reverseThread(void* arg) {
int len = 7;
while (1) {
pthread_mutex_lock(&mutex);
if (buf[0] == '7') {
for (int i = 0; i < len / 2; i++) {
char temp = buf[i];
buf[i] = buf[len - i - 1];
buf[len - i - 1] = temp;
}
}
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main() {
pthread_t threadA, threadB;
pthread_create(&threadA, NULL, printThread, NULL);
pthread_create(&threadB, NULL, reverseThread, NULL);
pthread_join(threadA, NULL);
pthread_join(threadB, NULL);
return 0;
}
#include <iostream>
#include <thread>
#include <mutex>
#include <atomic>
std::mutex mtx;
std::atomic<bool> canPrint(true);
void printThread(char* buf) {
while (true) {
if (canPrint) {
std::lock_guard<std::mutex> lock(mtx);
std::cout << buf << std::endl;
if (std::string(buf) == "1234567") {
canPrint = false;
}
}
}
}
void reverseThread(char* buf) {
int len = 7;
while (true) {
if (!canPrint) {
std::lock_guard<std::mutex> lock(mtx);
for (int i = 0; i < len / 2; i++) {
char temp = buf[i];
buf[i] = buf[len - i - 1];
buf[len - i - 1] = temp;
}
if (std::string(buf) == "1234567") {
canPrint = true;
}
}
}
}
int main() {
char buf[] = "1234567";
std::thread threadA(printThread, buf);
std::thread threadB(reverseThread, buf);
threadA.join();
threadB.join();
return 0;
}