alayi

程序人生用音乐来点缀

博客园 首页 联系 订阅 管理
//master C++ code colored by C++2HTML
#include <stdio.h> 
#include <unistd.h>
#include <stdbool.h>
#include <linux/fusion.h>
#include <fusion/fusion.h>
#include <fusion/shmalloc.h>
#include <fusion/call.h>
#include <fusion/arena.h>

// ABI version for sanity check #define DFB_ABI 70 enum { NEW_WORLD = -1, EXISTING_WORLD } FusionWorldType; // Shared memory pool size #define SHM_POOL_SIZE 0x1000000 FusionWorld *world; FusionSHMPoolShared *pool; /* * Callback function called from fusion_arena_enter() * Add here all variables that live in shared memory */ int initialize(FusionArena *arena, void *ctx) { char *str = NULL; printf("\t\t\tAllocate SHM for field in Arena (%s)\n", __FUNCTION__); str = (char *)SHMALLOC(pool, 1024); sprintf(str, "String in Arena!!!"); fusion_arena_add_shared_field(arena, "string1", (void *)str); printf("\t\t\tThe string is shared? "); fusion_is_shared(world, str) ? printf("Yes") : printf("No"); printf(" (%s)\n", __FUNCTION__); return 0;
}
/* * Callback function called from fusion_arena_enter() */ int shutdown(FusionArena *arena, void *ctx, bool emergency) { char *str = NULL; fusion_arena_get_shared_field(arena, "string1", (void *)&str); printf("\n\t\t\tFree shared memory (%s)\n\n", __FUNCTION__); SHFREE(pool, str); return 0;
}
int main () { int ret; char c; void *ctx; FusionArena *arena; printf("Creating Fusion world (%s)\n", __FUNCTION__); fusion_enter(NEW_WORLD, DFB_ABI, FER_MASTER, &world); printf("Fusion world created with index %d (%s)\n", fusion_world_index(world), __FUNCTION__); printf("Is this the master? "); fusion_master(world) ? printf("Yes") : printf("No"); printf(" (%s)\n", __FUNCTION__); printf("\tCreating SHM pool (%s)\n", __FUNCTION__); fusion_shm_pool_create(world, "WM SHM pool", SHM_POOL_SIZE, 0, &pool); printf("\t\tCreating Arena (%s)\n", __FUNCTION__); fusion_arena_enter(world, "WM Arena", initialize, NULL, &ctx, &arena, &ret); printf("\n\t\tPress enter to exit (%s)\n", __FUNCTION__); read(1, &c, 1); printf("\t\tShutting down Arena (%s)\n", __FUNCTION__); fusion_arena_exit(arena, shutdown, NULL, &ctx, 0, &ret); printf("\tDestroying SHM pool (%s)\n", __FUNCTION__); fusion_shm_pool_destroy(world, pool); printf("Exiting Fusion world (%s)\n", __FUNCTION__); fusion_exit(world, 0); return 0;
}


//slave
#include <stdio.h>
#include <unistd.h>
#include <linux/fusion.h>
#include <fusion/fusion.h>
#include <fusion/shmalloc.h>
#include <fusion/arena.h>
// ABI version for sanity check #define DFB_ABI 70 enum { NEW_WORLD = -1, EXISTING_WORLD } FusionWorldType; FusionWorld *world; /* * Callback function called from fusion_arena_enter() */ int join(FusionArena *arena, void *ctx) { char *str = NULL; printf("\t\tJoin Arena (%s)\n", __FUNCTION__); fusion_arena_get_shared_field(arena, "string1", (void *)&str); printf("\t\tString in SHM: %s\n", str); return 0;
}
/* * Callback function called from fusion_arena_exit() */ int leave(FusionArena *arena, void *ctx, bool emergency) { printf("\t\tLeave Arena (%s)\n", __FUNCTION__); return 0;
}
int main() { int ret; char c; void *ctx; FusionArena *arena; printf("Join Fusion world (%s)\n", __FUNCTION__); fusion_enter(EXISTING_WORLD, DFB_ABI, FER_SLAVE, &world); printf("Fusion world joined with index: %d (%s)\n", fusion_world_index(world), __FUNCTION__); printf("Am I the master? "); fusion_master(world) ? printf("Yes") : printf("No"); printf(" (%s)\n", __FUNCTION__); printf("\tJoin Arena (%s)\n", __FUNCTION__); fusion_arena_enter(world, "WM Arena", NULL, join, &ctx, &arena, &ret); printf("\n\tPress enter to finish\n"); read(1, &c, 1); printf("\tLeave Arena (%s)\n", __FUNCTION__); fusion_arena_exit(arena, NULL, leave, &ctx, 0, &ret); printf("Exit Fusion world (%s)\n", __FUNCTION__); fusion_exit(world, 0); return 0;
}
posted on 2007-11-02 11:20  alayi  阅读(609)  评论(0)    收藏  举报