Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-06-2006, 18:57   #1
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
[C]linux: programma didattico comunicazione tra thread

Salve ragazzi!
Sto implementando un programmino didattico: sarebbe una emulazione del gioco di space invaders (ma molto grezzo!),con grafica scarna.
Il programma è quasi analogo al classico problema dei "produttori-consumatori": creo dei processi con relativi thread, che accedono ad un buffer condiviso (protetto da semafori), basandomi sulle librerie lpthread e lncurses.
Riesco a creare correttamente i processi (e i thread) ma non riesco a fare altrettanto correttamente in fase di visualizzazione,gli alieni vengono sovrapposti su un'unica casella, così da sembrare che ve ne fosse solo uno, e non riesco a capirne il motivo. Per ora cerco di fare stampare solo gli alieni, in seguito implementerò le bombe e la nave del personaggio principale.
Qualcuno può darmi una mano? Vi allego il codice:
Codice:
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>

#define NUM_MAX_RIGHE 5
#define SINISTRA 68
#define DESTRA 67
#define N_INIZIALE_ALIENI 4
#define SPAZIO 1
#define SPAZIO_RIGHE 1
#define PASSO_X 2
#define PASSO_Y 1
#define MAX_BOMBE_NAVE 1
#define DIM_BUFFER N_INIZIALE_ALIENI


struct pos {
char *c;
int x;
int y;
int xPrec;
int yPrec;
int index;
int id;
};

struct pos alieni[N_INIZIALE_ALIENI];
int info_elementi[DIM_BUFFER];

void *alieno(void *);
void *controllo(void *);

pthread_t array_alieni[N_INIZIALE_ALIENI];
pthread_mutex_t semaforo = PTHREAD_MUTEX_INITIALIZER;
sem_t vuoto, pieno;
int dimAlieni, bufferScrittura, bufferLettura, counter;

int main() {
int i = 0, j = 1, k, nAlieniRiga;
pthread_t nave;
pthread_t bombaNave[MAX_BOMBE_NAVE];
pthread_t bombaAlieno[N_INIZIALE_ALIENI];
initscr();
noecho();
curs_set(0);
bufferScrittura = 0;
bufferLettura = 0;
counter = 0;
dimAlieni = 1;
nAlieniRiga = 20 / (dimAlieni + SPAZIO); //20 è inteso come numero COLS (pechè non abbiamo inizializzato le variabili di ncurses
sem_init(&vuoto, 0, DIM_BUFFER);
sem_init(&pieno, 0, 0);

for (k = 0; k < N_INIZIALE_ALIENI; k++){
	//struct pos pos_alieno;
	i = k % nAlieniRiga;
	j =  (k / nAlieniRiga) + 1;
	
	alieni[k].x = i * (SPAZIO + 1);
	alieni[k].y =  j * (SPAZIO_RIGHE + 1);
	alieni[k].c = "#";
	alieni[k].index = k;
	pthread_create(&array_alieni[k], NULL, &alieno, &alieni[k]);
}
controllo(NULL);
getchar();
endwin();
exit(0);
}

void *alieno(void *args)
{
struct pos pos_alieno = *(struct pos*) args;
pos_alieno.id = pthread_self();
int dir = 1, dx, dy;
srand(pos_alieno.id);
while(1)
	{
	pos_alieno.yPrec = pos_alieno.y;
	pos_alieno.xPrec = pos_alieno.x;
	dx = PASSO_X * dir;
	dy = 0;
	if (pos_alieno.x + dx >= COLS -1 || pos_alieno.x + dx <= 0)
		{
		if(dir > 0)
			pos_alieno.x = COLS - 1;
		else
			pos_alieno.x = 0;
		dir = -dir;
		dx = PASSO_X * dir;
		dy = PASSO_Y;
		}
	pos_alieno.x += dx;
	pos_alieno.y += dy;
	//sleep(rand() % 2); non funziona
	sem_wait(&vuoto); //Segnala che è stata scritta un altra posizione nel buffer
	pthread_mutex_lock(&semaforo); //equivale ad una wait su valore 1, che poi viene reincrementata dall'unlock che gli ri da valore 1
	info_elementi[bufferScrittura] = pos_alieno.index;
	bufferScrittura = (bufferScrittura + 1) % DIM_BUFFER;
	//printf("Buffer Scrittura %d\n", bufferScrittura); //facevo un po di debug!
	alieni[pos_alieno.index] = pos_alieno;
	pthread_mutex_unlock(&semaforo);
	sem_post(&pieno); //Segnala che c'è una posizione in più da leggere nel buffer
	sleep(1);
	}
}
 
void *controllo(void *args)
{
struct pos valore_letto;
int index, i = 0;
do {
	//sleep(rand() % 2); non funziona nemmeno così
	sem_wait(&pieno); //Segnala che è stata letta una posizione dal buffer
	pthread_mutex_lock(&semaforo);
	index = info_elementi[bufferLettura];
	bufferLettura = (bufferLettura + 1) % DIM_BUFFER;
	valore_letto = alieni[index];
	pthread_mutex_unlock(&semaforo);
	sem_post(&vuoto);
	move(valore_letto.yPrec, valore_letto.xPrec);
	printw(" "); //printw
	move(valore_letto.y, valore_letto.x);
	printw("%s",valore_letto.c);
	move(index, 0);
	//printw("%d",i); tutto questo è debug
	//printw("Valore letto x: %d, Valore letto y: %d, Numero alieno %d,\n", valore_letto.x, valore_letto.y, valore_letto.index);
	//move(0,15);
	//printw("\tlivello %d",livello);
	//move(0,27);
	//printw("\tvite %d",nave_vita);
	refresh();
	i++;
	}
while (true);
}
P.S. Compilare con le opzioni -lpthread & -lncurses, es:
gcc -o alieni alienThread.c -lncurses -lpthread
caralu è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
L'AI agentica potrebbe trasformare Inter...
Qualcomm lancerà due chip per sma...
Xiaomi dà i numeri: ecco come &eg...
AMD annuncia Ryzen 9 9950X3D2 Dual Editi...
CyrusOne avvia la costruzione del suo pr...
Cloud in crescita, ma l’adozione dell’IA...
OpenAI cancella l'adult mode di ChatGPT:...
Google Search Live arriva in Italia: la ...
MacBook Air 15'' con chip M4 (2025) crol...
Ora è possibile trasferire file t...
Apple domina con il MacBook Neo: i lapto...
Arriva la nuova gamma di PC Dell Pro per...
DJI Avata 360: la recensione del primo d...
Il browser di Samsung arriva su Windows,...
I satelliti AI Sat Mini per i datacenter...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v