Что такое семафор?

Мне не удалось найти функциональный код, который бы обошел без необходимости администратора

blockquote>

Предполагая, что у вас есть права администратора в вашей системе, вы можете запустить свой скрипт с оцененными привилегиями как подробно описано в , этот ответ . В противном случае, кроме эксплойтов, специфичных для вашей версии Windows, невозможно «обойти» необходимость администратора.

Что касается невозможности использовать код, написанный на Python 2, вы всегда можете конвертировать код между версиями Python. Это можно сделать вручную или с помощью автоматизированного инструмента, такого как стандартная программа 2to3 , которая поставляется с CPython.

Еще одно примечание: бесконечный цикл в примере кода, который вы разместили, обычно записывается как

while True:
    #  body statements

. Использование 1 вместо True по-прежнему работает как ненулевые целые числа. являются «правдивыми» при оценке в контексте, где ожидается логическое выражение.

326
задан bmurphy1976 29 August 2008 в 04:58
поделиться

1 ответ

Семафоры являются действием как ограничители потока.

Пример: , Если у Вас есть пул 100 потоков и Вы хотите выполнить некоторую операцию DB. Если 100 потоков получают доступ к DB в установленный срок, то там может блокировать проблему в DB, таким образом, мы можем использовать семафор, которые позволяют только ограниченный поток за один раз. Ниже Примера позволяют только один поток за один раз. Когда вызов потока acquire() метод, это затем получит доступ и после вызова release() метод, он выпустит доступ так, чтобы следующий поток получил доступ.

    package practice;
    import java.util.concurrent.Semaphore;

    public class SemaphoreExample {
        public static void main(String[] args) {
            Semaphore s = new Semaphore(1);
            semaphoreTask s1 = new semaphoreTask(s);
            semaphoreTask s2 = new semaphoreTask(s);
            semaphoreTask s3 = new semaphoreTask(s);
            semaphoreTask s4 = new semaphoreTask(s);
            semaphoreTask s5 = new semaphoreTask(s);
            s1.start();
            s2.start();
            s3.start();
            s4.start();
            s5.start();
        }
    }

    class semaphoreTask extends Thread {
        Semaphore s;
        public semaphoreTask(Semaphore s) {
            this.s = s;
        }
        @Override
        public void run() {
            try {
                s.acquire();
                Thread.sleep(1000);
                System.out.println(Thread.currentThread().getName()+" Going to perform some operation");
                s.release();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } 
    }
1
ответ дан 23 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

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