stasis-aries-wal/benchmarks/naiveMultiThreaded.c
Sears Russell 6198522971 Starting to rip the old jbhash implementation out, and replace it with a
linear hash implementation.  In particular, I've implemented (sort of) an
iterator for linear hash, and (sort of) ported libdfa to linearhash.c

I say 'sort of' since this functionality is broken with this commit.  On the other hand, CVS should build now, and the tests under lladd will pass.  libdfa's new tests don't pass at the moment.
2005-01-10 03:02:02 +00:00

64 lines
1.2 KiB
C

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <lladd/transactional.h>
#include <unistd.h>
#include <pthread.h>
static pthread_mutex_t hash_mutex = PTHREAD_MUTEX_INITIALIZER;
static int count;
static recordid hash;
static void * go (void * arg_ptr) {
pthread_mutex_lock(&hash_mutex);
int k = *(int*)arg_ptr;
int j;
int xid = Tbegin();
for(j = k * count; j < (k+1) *(count) ; j++) {
TnaiveHashInsert(xid, hash, &j, sizeof(int), &j, sizeof(int));
// printf("(%d)", k);
}
Tcommit(xid);
pthread_mutex_unlock(&hash_mutex);
return NULL;
}
int main(int argc, char** argv) {
assert(argc == 3);
int thread_count = atoi(argv[1]);
count = atoi(argv[2]);
unlink("storefile.txt");
unlink("logfile.txt");
unlink("blob0_file.txt");
unlink("blob1_file.txt");
pthread_t * workers = malloc(sizeof(pthread_t) * thread_count);
Tinit();
int xid = Tbegin();
hash = ThashAlloc(xid, sizeof(int), sizeof(int));
Tcommit(xid);
int k;
for(k = 0; k < thread_count; k++) {
int * k_copy = malloc(sizeof(int));
*k_copy = k ;
pthread_create(&workers[k], NULL, go, k_copy);
}
for(k = 0; k < thread_count; k++) {
pthread_join(workers[k],NULL);
}
/* Tdeinit() */
}