smurf2
May 15, 2009, 11:28am
1
Hello! I started studying studying about POSIX Threads a few days ago... so I am a little confused and I would appreciate some help!
I isolated this code... and I wonder if I could use threads in it!
#include <unistd.h>
#endif
#include <math.h>
//#include "main.h"
#include <sys/time.h>
#include <time.h>
#define TEMPRANGE 100.0
#define ROOMTEMP 0.0
volatile double ***before;
volatile double ***after;
// x-axis
const int cols = 240;
// y-axis
const int rows = 80;
// z-axis
const int faces = 8;
int main(int argc, char** argv){
char buffer[30];
struct timeval tv;
time_t curtime;
gettimeofday(&tv, NULL);
curtime=tv.tv_sec;
strftime(buffer,30,"%m-%d-%Y %T.",localtime(&curtime));
printf("%s%ld\n",buffer,tv.tv_usec);
int i, j, k;
before = (volatile double ***) malloc((cols + 2) * sizeof(double **));
after = (volatile double ***) malloc((cols + 2) * sizeof(double **));
for(i = 0; i < cols + 2; i++){
before = (volatile double **) malloc((rows + 2) * sizeof(double *));
after = (volatile double **) malloc((rows + 2) * sizeof(double *));
}
for(i = 0; i < cols + 2; i++){
for(j = 0; j < rows + 2; j++){
before[j] = (volatile double *) malloc((faces + 2) * sizeof(double));
after[j] = (volatile double *) malloc((faces + 2) * sizeof(double));
}
}
for(i = 0; i < cols + 2; i++){
for(j = 0; j < rows + 2; j++){
for(k = 0; k < faces + 2; k++){
before[j][k] = ROOMTEMP;
after[j][k] = ROOMTEMP;
}
}
}
char buffer1[30];
time_t curtime1;
gettimeofday(&tv, NULL);
curtime1=tv.tv_sec;
strftime(buffer1,30,"%m-%d-%Y %T.",localtime(&curtime1));
printf("%s%ld\n",buffer1,tv.tv_usec);
}
I was thinking of putting the three for loops in 3 different threads and keep in the main the other code and use pthread_join in main for each one of the 3 threads. I hope you understand my way of thinking... Am I thinking right?
Thank you in advance!
Here is my threade code... If anybody can take a look and tell me if there is sth wrong I would appreciate it very much!
#ifdef linux
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#endif
#include <math.h>
//#include "main.h"
#include <sys/time.h>
#include <time.h>
#define TEMPRANGE 100.0
#define ROOMTEMP 0.0
#define SOURCETEMP 100.0
// Plate temperatures for the jacobi calculation
volatile double ***before;
volatile double ***after;
// x-axis
const int cols = 240;
// y-axis
const int rows = 80;
// z-axis
const int faces = 8;
//thread function1
void *thread_function1 (void *arg){
before = (volatile double ***) malloc((cols + 2) * sizeof(double **));
after = (volatile double ***) malloc((cols + 2) * sizeof(double **));
}
//thread function2
void *thread_function2 (void *arg){
for(int i = 0; i < cols + 2; i++){
before = (volatile double **) malloc((rows + 2) * sizeof(double *));
after = (volatile double **) malloc((rows + 2) * sizeof(double *));
}
}
//thread function3
void *thread_function3 (void *arg){
for(int i = 0; i < cols + 2; i++){
for(int j = 0; j < rows + 2; j++){
before[j] = (volatile double *) malloc((faces + 2) * sizeof(double));
after[j] = (volatile double *) malloc((faces + 2) * sizeof(double));
}
}
}
int main(int argc, char** argv){
char buffer[30];
struct timeval tv;
time_t curtime;
pthread_t mythread1;
pthread_t mythread2;
pthread_t mythread3;
gettimeofday(&tv, NULL);
curtime=tv.tv_sec;
strftime(buffer,30,"%m-%d-%Y %T.",localtime(&curtime));
printf("%s%ld\n",buffer,tv.tv_usec);
int i, j, k;
if ( pthread_create( &mythread1, NULL, thread_function1, NULL) ) {
printf("error creating thread.");
abort();
}
if ( pthread_create( &mythread2, NULL, thread_function2, NULL) ) {
printf("error creating thread.");
abort();
}
if ( pthread_create( &mythread3, NULL, thread_function3, NULL) ) {
printf("error creating thread.");
abort();
}
if ( pthread_join ( mythread1, NULL ) ) {
printf("error joining thread.");
abort();
}
if ( pthread_join ( mythread2, NULL ) ) {
printf("error joining thread.");
abort();
}
if ( pthread_join ( mythread3, NULL ) ) {
printf("error joining thread.");
abort();
}
for(i = 0; i < cols + 2; i++){
for(j = 0; j < rows + 2; j++){
for(k = 0; k < faces + 2; k++){
before[j][k] = ROOMTEMP;
after[j][k] = ROOMTEMP;
}
}
}
char buffer1[30];
time_t curtime1;
gettimeofday(&tv, NULL);
curtime1=tv.tv_sec;
strftime(buffer1,30,"%m-%d-%Y %T.",localtime(&curtime1));
printf("%s%ld\n",buffer1,tv.tv_usec);
}