HP-MPI User's Guide (11th Edition)

Example applications
thread_safe.c
Appendix A 265
return (void*) 0;
}
void client(rank, size)
int rank;
int size;
{
int w, server, ack;
MPI_Status status;
for (w = 0; w < MAX_WORK; w++) {
server = rand()%size;
MPI_Sendrecv(&rank, 1, MPI_INT, server, SERVER_TAG, &ack,
1,MPI_INT,server,CLIENT_TAG,MPI_COMM_WORLD,
&status);
if (ack != server) {
printf("server failed to process my
request\n");
MPI_Abort(MPI_COMM_WORLD, MPI_ERR_OTHER);
}
}
}
void shutdown_servers(rank)
int rank;
{
int request_shutdown = REQ_SHUTDOWN;
MPI_Barrier(MPI_COMM_WORLD);
MPI_Send(&request_shutdown, 1, MPI_INT, rank,
SERVER_TAG, MPI_COMM_WORLD);
}
main(argc, argv)
int argc;
char *argv[];
{
int rank, size, rtn;
pthread_t mtid;
MPI_Status status;
int my_value, his_value;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
rtn = pthread_create(&mtid, 0, server, (void*)&rank);
if (rtn != 0) {
printf("pthread_create failed\n");
MPI_Abort(MPI_COMM_WORLD, MPI_ERR_OTHER);
}