
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Granting Multiple Access to Resources with a Semaphore
|
1041
18.10 Granting Multiple Access to Resources
with a Semaphore
Problem
You have a resource you want only a certain number of clients to access at a given
time.
Solution
Use a semaphore to enable resource-counted access to the resource. For example, if
you have an Xbox and a copy of Halo2 (the resource) and a development staff eager
to blow off some steam (the clients), you have to synchronize access to the Xbox.
Since the Xbox has four controllers, up to four clients can be playing at any given
time. The rules of the house are that when you die, you give up your controller.
To accomplish this, create a class called
Halo2Session with a Semaphore called _Xbox
like this:
public class Halo2Session
{
// A semaphore that simulates a limited resource pool
//
private static Semaphore _Xbox;
// Player handles for Xbox
private static string [] _handles = new string [9]{"Igor",
"AxeMan",
"Frosty",
"Dr. Death",
"HaPpyCaMpEr",
"Executioner",
"FragMan",
"Beatdown",
"Stoney"
};
The _handles array is an array of player names that will be used. In order to get
things rolling, you need to call the
Play method, shown in Example 18-7, on the
Halo2Session class.
Example 18-7. Play method
public static void Play( )
{
// An Xbox has four controller ports so ...