Simple shared memory example.
#include <l4/util/util.h>
#include <stdio.h>
#include <pthread-l4.h>
#include <l4/sys/thread.h>
#define CHK(func) if (func) { printf("failure: %d\n", __LINE__); return (void *)-1; }
static const char some_data[] = "Hi consumer!";
static void *thread_producer(void *d)
{
(void)d;
l4shmc_chunk_t p_one;
l4shmc_signal_t s_one, s_done;
l4shmc_area_t shmarea;
pthread_l4_cap(pthread_self()), 10000, &s_done));
printf("PRODUCER: ready\n");
while (1)
{
printf("Uh, should not happen!\n");
printf("PRODUCER: Sent data\n");
}
return NULL;
}
static void *thread_consume(void *d)
{
(void)d;
l4shmc_area_t shmarea;
l4shmc_chunk_t p_one;
l4shmc_signal_t s_one, s_done;
pthread_l4_cap(pthread_self()), 10000, &s_one));
while (1)
{
printf("CONSUMER: Received from chunk one: %s\n",
}
return NULL;
}
int main(void)
{
pthread_t one, two;
return 1;
pthread_create(&one, 0, thread_producer, 0);
pthread_create(&two, 0, thread_consume, 0);
return 0;
}
long l4shmc_attach(const char *shmc_name, l4shmc_area_t *shmarea)
Attach to a shared memory area.
long l4shmc_connect_chunk_signal(l4shmc_chunk_t *chunk, l4shmc_signal_t *signal)
Connect a signal with a chunk.
long l4shmc_create(const char *shmc_name, l4_umword_t shm_size)
Create a shared memory area.
long l4shmc_chunk_consumed(l4shmc_chunk_t *chunk)
Mark a chunk as free.
long l4shmc_wait_chunk(l4shmc_chunk_t *chunk)
Wait on a specific chunk.
long l4shmc_chunk_size(l4shmc_chunk_t *chunk)
Get current size of a chunk.
long l4shmc_chunk_ready_sig(l4shmc_chunk_t *chunk, l4_umword_t size)
Mark chunk as filled (ready) and signal consumer.
long l4shmc_chunk_try_to_take(l4shmc_chunk_t *chunk)
Try to mark chunk busy.
long l4shmc_add_chunk(l4shmc_area_t *shmarea, const char *chunk_name, l4_umword_t chunk_capacity, l4shmc_chunk_t *chunk)
Add a chunk in the shared memory area.
void * l4shmc_chunk_ptr(l4shmc_chunk_t *chunk)
Get data pointer to chunk.
long l4shmc_get_chunk(l4shmc_area_t *shmarea, const char *chunk_name, l4shmc_chunk_t *chunk)
Get chunk out of shared memory area.
long l4shmc_wait_signal(l4shmc_signal_t *signal)
Wait on a specific signal.
long l4shmc_trigger(l4shmc_signal_t *signal)
Trigger a signal.
long l4shmc_add_signal(l4shmc_area_t *shmarea, const char *signal_name, l4shmc_signal_t *signal)
Add a signal for the shared memory area.
long l4shmc_attach_signal_to(l4shmc_area_t *shmarea, const char *signal_name, l4_cap_idx_t thread, l4_umword_t timeout_ms, l4shmc_signal_t *signal)
Attach to signal, with timeout.
void l4_sleep_forever(void) L4_NOTHROW)
Go sleep and never wake up.
Shared memory library header file.