Shared event example. Instead of creating special thread user can use shared event queue i.e. sharing it with other system components and saving RAM. As the event queue is shared, you should limit the execution time of your event functions to avoid delaying other users’ events excessively.

Revision:
0:7c7d5b625e59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Dec 18 16:50:19 2017 +0000
@@ -0,0 +1,26 @@
+#include "mbed.h"
+#include "mbed_events.h"
+ 
+DigitalOut led1(LED1);
+InterruptIn sw(SW2);
+ 
+void rise_handler(void) {
+    // Toggle LED
+    led1 = !led1;
+}
+ 
+void fall_handler(void) {
+    printf("fall_handler in context %p\r\n", Thread::gettid());
+    // Toggle LED
+    led1 = !led1;
+}
+ 
+int main() {
+    // Request the shared queue
+    EventQueue *queue = mbed_event_queue();
+    printf("Starting in context %p\r\n", Thread::gettid());
+    // The 'rise' handler will execute in IRQ context
+    sw.rise(rise_handler);
+    // The 'fall' handler will execute in the context of the shared queue thread
+    sw.fall(queue->event(fall_handler));
+}