My favorites | Sign in
Project Home Downloads Wiki Issues Source
Project Information
Members
Links

About

libactor 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:

  • Spawn actor
  • Sending messages
  • Broadcast message
  • Actor memory management convenience functions(when an actor dies, the memory is freed!)

You can find documentation here.

Installation

Get a copy of the source in the downloads section.

./configure && make
sudo make install

Example

Here 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)
Powered by Google Project Hosting