Много лет назад я преподавал кого-то к программе в C. Осуществление должно было повернуть диаграмму через 90 градусов. Он возвратился с решением, которое заняло несколько минут для завершения, главным образом потому что он использовал, умножается и делится и т.д.
, я показал ему, как переделать проблему с помощью сдвигов разряда, и время для обработки свелось приблизительно к 30 секундам на неоптимизирующем компиляторе, который он имел.
я только что получил оптимизирующий компилятор, и тот же код повернул диаграмму в < 5 секунд. Я посмотрел на ассемблерный код, который компилятор генерировал, и от того, что я видел решенный тут же, что мои дни записи ассемблера были закончены.
Простой пример для compareAndSet () функция:
import java.util.concurrent.atomic.AtomicInteger;
public class GFG {
public static void main(String args[])
{
// Initially value as 0
AtomicInteger val = new AtomicInteger(0);
// Prints the updated value
System.out.println("Previous value: "
+ val);
// Checks if previous value was 0
// and then updates it
boolean res = val.compareAndSet(0, 6);
// Checks if the value was updated.
if (res)
System.out.println("The value was"
+ " updated and it is "
+ val);
else
System.out.println("The value was "
+ "not updated");
}
}
печатное: предыдущее значение: 0 значение было обновлено, и это - 6 Других простых примеров:
import java.util.concurrent.atomic.AtomicInteger;
public class GFG {
public static void main(String args[])
{
// Initially value as 0
AtomicInteger val
= new AtomicInteger(0);
// Prints the updated value
System.out.println("Previous value: "
+ val);
// Checks if previous value was 0
// and then updates it
boolean res = val.compareAndSet(10, 6);
// Checks if the value was updated.
if (res)
System.out.println("The value was"
+ " updated and it is "
+ val);
else
System.out.println("The value was "
+ "not updated");
}
}
печатное: Предыдущее значение: 0 значение не было обновлено