12345678910111213141516171819202122232425262728 |
- var Class = require('./Class');
- var Queue = require('./Queue');
- exports = Class({
- initialize: function Semaphore() {
- var counter =
- arguments.length > 0 && arguments[0] !== undefined
- ? arguments[0]
- : 1;
- this._counter = counter;
- this._tasks = new Queue();
- },
- wait: function(fn) {
- if (this._counter > 0) {
- this._counter--;
- return fn();
- }
- this._tasks.enqueue(fn);
- },
- signal: function() {
- var task = this._tasks.dequeue();
- if (task) {
- return task();
- }
- this._counter++;
- }
- });
- module.exports = exports;
|