crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> C++, многопоточность, linux
vankleef
  опции профиля:
сообщение 25.11.2010, 1:18
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 21.10.2010
Пользователь №: 2134

Спасибо сказали: 9 раз(а)




Репутация:   1  


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

#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
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1599
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


любое условие в функцию потоков, чтобы они фактически стартовали одновременно. это может быть ожидание какого-нибудь события, счётчик или семафор. неважно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 25.11.2010, 9:56
Сообщение #3


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


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

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.12.2020, 4:43