logo logo
Home arrow Frontpage
Saturday, 11 February 2012
 
 
Main Menu
Home
Conscious Machines...
AI Techniques...
Neuroscience...
Researchers...
Publications...
Reviews...
MC Bibliography
Robotics Studio...
Forums...
Blog...
Frontpage
Latest Content
Upcoming Events
22.Feb. 2012

CogSys 2012
Vienna, Austria
04.Apr. 2012

TSC 2012
Tucson, Arizona
17.May. 2012

EAIS 2012
Madrid, Spain
05.Jun. 2012

Cognition & Consciousness
Menorca. Spain
02.Jul. 2012

ASSC 16
Brighton, UK
02.Jul. 2012

Revisiting Turing and his Test
Birmingham, UK
31.Oct. 2012

BICA 2012
Palermo. Italy
Tag Cloud
Associations Books Conferences Conscious Conscious Machines Consciousness Developer Documentación Documentation Español Machine Machine Consciousness Machines Neuroscience Positions Publications Research Researchers Reviews Robotics Robots Spanish Studio VPL
Spotlight
More
Reader's Preferred
MCexperts List
FAQs
Glossary
Site Map
   
ConsScale
   

MC-Papers: Weekly updated compilation of Machine Consciousness Papers

ConsScale: A Scale for Measuring the Development of Consciousness in Artificial Agents (www.ConsScale.com)

 

Introducción a CCR (Concurrency and Coordination Runtime) - Introducción al CCR Print E-mail
Written by Ana Santos y Raúl Arrabales   
Wednesday, 30 January 2008
Article Index
Introducción al CCR
Un Ejemplo Sencillo
Inicialización del CCR
Patrones Simples
Ejemplo de Interleave

Podemos incluir otro ejemplo, en el que se ve la utilidad de Arbiter.Interleave:


class SampleService
{
   Dispatcher dispatcher =
new Dispatcher(0, "Sample Service");
   DispatcherQueue taskQueue =
new DispatcherQueue();
   Port<
string> pState = new Port<string>();
   ServicePort pMain =
new ServicePort();
  
   ServicePort InitStatefull()
   {
        dispatcher.AddQueue(taskQueue);
        pState.Post(
"Hello");
        Arbiter.Activate(taskQueue,
        Arbiter.Interleave(
          
new TeardownReceiverGroup(Arbiter.Receive(false, pMain, Shutdown)),
          
new ExclusiveReceiverGroup(Arbiter.Receive(true, pMain, Update)),
          
new ConcurrentReceiverGroup(Arbiter.Receive(true, pMain, GetState)))
        );
      
return pMain;
   }
}


En este ejemplo vemos que se han seguido los mismos pasos que en el ejemplo anterior. La diferencia es que añadimos un método (InitStatefull()) que devuelve un objeto de la clase ServicePort y en él usamos Arbiter.Interleave, que nos proporciona garantías de protección hasta que el proceso halla terminado. Los tres parámetros que toma Interleave son:

- TearDownReceiverGroup: se añaden las tareas que hay que realizar sólo una vez al terminar todo.

- ExclusiveReceiverGroup: se ponen las tareas que se tienen que ejecutar en serie (sin concurrencia).

- ConcurrentReceiverGroup: se ponen las tareas que se pueden ejecutar en paralelo sin problemas (porque no tienen dependencias de datos entre ellas).

Un ejemplo más concreto del uso de Interleave sería el siguiente:


Port<WebResponse> responsePort = null;
Port<Exception> failurePort = null;
for (Int32 n = 0; n < c_ImageUrls.Length; n++)
{
   WebRequest webReq = WebRequest.Create(c_ImageUrls[n]);
   ApmToCcrAdapters.GetResponse(webReq, ref responsePort, ref failurePort);}

   Arbiter.Activate( dq, Arbiter.Interleave(
      
       new TeardownReceiverGroup (Arbiter.Receive (false, failurePort, delegate(Exception e)
                   {Msg("At least 1 GetResponse failed");})),

       new ExclusiveReceiverGroup(),

       new ConcurrentReceiverGroup(Arbiter.Receive(true, responsePort,delegate(WebResponse response)
                  {Byte[] data = new Byte[response.ContentLength];
                   response.GetResponseStream().Read(data, 0, data.Length);
                   Msg("RequestUri={0}", response.ResponseUri); })
    )));


Podemos comprobar en este ejemplo que en la llamada al método Interleave tenemos los tres parámetros citados anteriormente. En concreto, primero se crea una instancia de TeardownReceiverGroup, que ejecutará el receptor de la clase Arbiter una vez acabado todo. Si saltara la excepción, mostraría un mensaje por pantalla: "At least 1 GetResponse failed". En cuanto al segundo parámetro: ExclusiveReceiverGroup, no incluye ninguna tarea para ser ejecutada. Por último, el parámetro ConcurrentReceiverGroup, ejecutará el receptor del puerto de respuesta (responsePort), que no tiene dependencia con ningún dato.


Comparte tus dudas, comentarios o sugerencias en el Foro de Robotics Studio en Español.

 


Add as favourites (126) | Quote this article on your site | Views: 4460

  Be first to comment this article
RSS comments

Only registered users can write comments.
Please login or register.


Related Items:

  1. Jobs: Two Chair positions for new Centre for Computational Neuroscience and Co
  2. Birmingham Fellows in Robotics and Cognitive Systems
  3. Finding papers about consciousness and robotics
  4. Paladyn. Journal of Behavioral Robotics
  5. International Journal of Social Robotics
  6. Cognitive Robotics and Machine Consciousness
  7. Cognitive Robotics
  8. Polymorphic Robotics
  9. Urbi goes Open Source
  10. The Tower of Hanoi for Robotics


Last Updated ( Friday, 01 February 2008 )
 





Lost Password?
No account yet? Register
 Conscious Robots RSS FeedConscious Robots RSS Feed

Find us on Facebook

Follow us on TwitterFollow us on twitter
Polls
Can Robots Become Conscious?
 
Categories
Last Posts in Forum
 
CR
miel continental