под Windows ваш код вызывает сбой программы из-за одновременной попытки писать в консоль из двух потоков.
у меня не поворачивается язык назвать 22-ую версию федоры "испытательным полигоном".
федора превращается в несокрушимую скалу стабильности.
и был огорчён тем, что aMule не запустился, выдав ошибку.
и понял, что такая стабильность мне не нужна)))
Откуда вы можете быть уверены, что под всеми нужными вам системами потоки будут реализованы только так
Нет, без холливаров, пожалуйста.
однако в С++ данный код был бы не корректен
using namespace std;
mutex mux1, mux2;
void tfunc( int rep ) {
for( int i = 0; i < rep; i++ ) {
mux2.lock();
cout << "child: строка №" << i + 1 << endl;
mux1.unlock();
}
};
int main( int argc, char *argv[] ) {
mux2.lock();
const int rep = 5;
thread thr( tfunc, rep );
for( int i = 0; i < rep; i++ ) {
mux1.lock();
cout << "parent: строка №" << i + 1 << endl;
mux2.unlock();
}
thr.join();
};
только чередование блокированных состояний.
В задаче нужно что-то передавать. Без циклов это сделать невозможно.
#include <pthread.h>
#include <iostream>
using namespace std;
pthread_mutex_t mux1 = PTHREAD_MUTEX_INITIALIZER,
mux2 = PTHREAD_MUTEX_INITIALIZER;
void* tfunc ( void* parm ) {
int rep = (int)parm;
for( int i = 0; i < rep; i++ ) {
pthread_mutex_lock( &mux2 );
cout << "child: строка №" << i + 1 << endl;
pthread_mutex_unlock( &mux1 );
}
return NULL;
};
int main( int argc, char *argv[] ) {
pthread_mutex_lock( &mux2 );
pthread_t tid;
const int rep = 5;
pthread_create( &tid, NULL, tfunc, (void*)rep );
for( int i = 0; i < rep; i++ ) {
pthread_mutex_lock( &mux1 );
cout << "parent: строка №" << i + 1 << endl;
pthread_mutex_unlock( &mux2 );
}
pthread_join( tid, NULL );
};
$ ./2thr
parent: строка №1
child: строка №1
parent: строка №2
child: строка №2
parent: строка №3
child: строка №3
parent: строка №4
child: строка №4
parent: строка №5
child: строка №5
понимаю
while(global_ctr < 10){
if(!pthread_mutex_trylock(&writer)){
}
}
Все, довольны?
холостые циклы разрешается использовать только на этапе инициализации.