Programação em C com threads

1. Programação em C com threads

Allan Marcello
allanmarcello

(usa KUbuntu)

Enviado em 20/06/2019 - 21:11h

Boa noite galera,
tenho o exemplo de programação abaixo e gostaria de implementar threads, a saida do programa deve ser “TIC” , “TAC”, “TIC”,
“TAC” ... alguem consegue me ajudar ?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 2
int imprimir( int tid, int n )
{
int i;
for ( i = 0; i < n; i++ )
if ( tid == 0 ) printf( "TIC\n" );
else printf( "\tTAC\n");
return 0;
}
int main( int argc, char *argv[] )
{
int tid[] = { 0, 1 }; // Não altere o escopo desse vetor
int i, n = 10;
if ( argc == 2 ) n = atoi( argv[1] );
for ( i = 0; i < NUM_THREADS; i++ ) imprimir( tid[i], n );
return 0;
}


  


2. Re: Programação em C com threads

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/06/2019 - 09:55h

Onde estão os threads (criados com pthread_create())?


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


3. Re: Programação em C com threads

Allan Marcello
allanmarcello

(usa KUbuntu)

Enviado em 22/06/2019 - 13:08h

ainda estou desenvolvendo
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define NUM_THREADS 2
int nRep = 10;
int flag[2] = {0, 0}; // flag é um vetor de booleanos
int turno = 0; // booleano, turno significa "vez"
int _valor;
int priRodada = 1; //variavel para a primeira rodada

void *f_thread(void *v)
{
int id = *(int *)v;
int i;
//if(priRodada == 1 && id == 0)
for (i = 0; i < nRep; i++)
{ //primeira rodada 1/ segunda ...0
if (priRodada == 1); // para sempre iniciar a primeira threads
//for (int x = 0;)
else{
// Algoritmo de Peterson

turno = !id; // Passo a vez para o outro
// Enquanto o outro quer entrar e não é minha vez, aguardo...
while (flag[!id] == 1 && turno != id)
;
}
// Início da região crítica
flag[id] = 1; // Quero entrar na Região Crítica
_valor = id;
if (id == 0)
printf("TIC\n");
if (id == 1)
printf("\t\tTAC\n");
// Fim da região crítica
flag[id] = 0; // Não quero entrar na região crítica
priRodada = 0;
}
return NULL;
}

int main(int argc, char *argv[])
{
if (atoi(argv[1]) != 0)
nRep = atoi(argv[1]);

pthread_t thr[NUM_THREADS];
int id[NUM_THREADS], i;

for (i = 0; i < NUM_THREADS; i++)
{
id[i] = i;
//pthread_create(&thr[i], NULL, f_thread, &id[i]);
pthread_create(&thr[i], NULL, f_thread, (void *)&id[i]);
}

for (i = 0; i < NUM_THREADS; i++)
pthread_join(thr[i], NULL);

return 0;
}
achei um novo problema, a ordem não fica exata






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts