|
Project Information
Members
Links
|
Aboutlibactor is a library for C that allows a developer to easily program with the Actor Model. Right now it is usable, although it may not be ready for production. It uses pthreads and the library handles all of threading issues, so you don’t have to worry about any of it at all. In a future version I plan to add more sandboxing to the actors, so that when one actor crashes, they don’t all go down! Right now it supports the following:
You can find documentation here. InstallationGet a copy of the source in the downloads section. ./configure && make sudo make install ExampleHere is an example of two actors that just Ping/Pong each other. To compile: gcc -lactor -o pingpong pingpong.c pingpong.c #include <libactor/actor.h>
enum {
PING_MSG = 100,
PONG_MSG
};
void *pong_func(void *args) {
actor_msg_t *msg;
while(1) {
msg = actor_receive();
if(msg->type == PING_MSG) {
printf("PING! ");
actor_reply_msg(msg, PONG_MSG, NULL, 0);
}
arelease(msg);
}
return 0;
}
void *ping_func(void *args) {
actor_msg_t *msg;
actor_id aid = spawn_actor(pong_func, NULL);
while(1) {
actor_send_msg(aid, PING_MSG, NULL, 0);
msg = actor_receive();
if(msg->type == PONG_MSG) printf("PONG!\n");
arelease(msg);
sleep(5);
}
return 0;
}
void *main_func(void *args) {
struct actor_main *main = (struct actor_main*)args;
int x;
/* Accessing the arguments passed to the application */
printf("Number of arguments: %d\n", main->argc);
for(x = 0; x < main->argc; x++) printf("Argument: %s\n", main->argv[x]);
/* PING/PONG example */
spawn_actor(ping_func, NULL);
return 0;
}
DECLARE_ACTOR_MAIN(main_func)
|