Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ С\С++ _ C++, многопоточность, linux

Автор: vankleef 25.11.2010, 1:18

Имеется простая программа-пример:

#include <iostream>
#include <pthread.h>
#include <semaphore.h>

using namespace std;

void *niggers(void *arg){
    int local=*(int *)arg;    
    for(int i=0;i<100;i++){
        cout<<local<<endl;
    }
}

int main(int argc, char** argv) {
    int n1=1,n2=2;
    pthread_t t1,t2;
    pthread_create(&t1,NULL,niggers,&n1);
    pthread_create(&t2,NULL,niggers,&n2);

    pthread_join(t1,NULL);
    pthread_join(t2,NULL);
    return 0;
}


Компилирую с ключем -lpthread.
При выводе результата получается следующее: сначала выводится результат одного потока, потом-второго, а не вперемешку.

Как можно сделать чтобы один поток дал процессорное время другому?
Компилировал подобный код в уиндовсе с помощью gcc там вывод нормальный-вперемешку.

Автор: Iron Bug 25.11.2010, 7:41

любое условие в функцию потоков, чтобы они фактически стартовали одновременно. это может быть ожидание какого-нибудь события, счётчик или семафор. неважно.

Автор: igor_bogomolov 25.11.2010, 9:56

Цитата(vankleef @ 25.11.2010, 1:18) *
При выводе результата получается следующее: сначала выводится результат одного потока, потом-второго, а не вперемешку.
Так ты сделай не 100 повторений, а 100000 и увидишь, что они вперемешку.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)