условная переменная pthread

Я понял, как это решить. Это должен быть отделенный объект под названием Spot. Мой код более сложный, поэтому я буду вставлять код, который я нашел на форумах Adobe, он просто короче. Вы можете пропустить создание образца, новый образец будет автоматически добавлен с тем же именем, что и newSpot. Вы можете назначить цвет образца для pathItem (не для newSpot напрямую), и spot будет привязан к цвету pathItem.

addSpot ('FOIL', 10, 0, 100, 0);  

function addSpot(name, c, m, y, k) {  
    try {  
        swatch = app.activeDocument.swatches[name]; // if swatch exists....  
        addSpot (name+='1', c, m, y, k); // ...add 1 to swatch name  
    }  
    catch (e) {  
        var newSpot = app.activeDocument.spots.add();  
        newSpot.name = name;  

        var newColor = new CMYKColor();  
        newColor.cyan = c;  
        newColor.magenta = m;  
        newColor.yellow = y;  
        newColor.black = k;  


        newSpot.colorType = ColorModel.SPOT;  
        newSpot.color = newColor;  
        var newSpotColor = new SpotColor();  
        newSpotColor.spot = newSpot;  
    }  
}  
8
задан Good Person 6 November 2012 в 03:00
поделиться

2 ответа

Из pthread_cond_signal Руководства:

pthread_cond_broadcast () и pthread_cond_signal () функции не должны иметь никакого эффекта, если не будет никаких потоков, в настоящее время блокируемых на конусовидном.

Я предлагаю, чтобы Вы использовали Семафоры. В основном каждый раз задача вставляется в очередь, Вы семафор. Блоки рабочего потока на семафоре "вниз" 'лугом это. Так как это будет' редактор одно время для каждой задачи, рабочий поток продолжится, пока существуют задачи в очереди. Когда очередь пуста, семафор в 0, и блоки рабочего потока, пока новая задача не прибывает. Семафоры также легко обрабатывают случай, когда больше чем 1 задача прибыла, в то время как рабочий был занят. Заметьте, что все еще необходимо заблокировать доступ к очереди для хранения, вставляет/удаляет атомарный.

11
ответ дан 5 December 2019 в 06:54
поделиться

Семафоры являются хорошим if-and-only-if, Ваша очередь уже ориентирована на многопотоковое исполнение. Кроме того, некоторые семафорные реализации могут быть ограничены главным встречным значением. Даже маловероятно, что Вы превысили бы максимальное значение.

Самый простой и корректный способ сделать это следует:

pthread_mutex_t queue_lock;
pthread_cond_t  not_empty;
queue_t queue;

push()
{
  pthread_mutex_lock(&queue_lock);
  queue.insert(new_job);
  pthread_cond_signal(&not_empty)
  pthread_mutex_unlock(&queue_lock);
}
pop()
{
  pthread_mutex_lock(&queue_lock);
  if(queue.empty()) 
     pthread_cond_wait(&queue_lock,&not_empty);
  job=quque.pop();
  pthread_mutex_unlock(&queue_lock);
}
12
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: