Важным отличием между заблокированными и ожидающими состояниями является влияние на планировщик. Нить в заблокированном состоянии является частью waitset, борющейся за блокировку; этот поток по-прежнему считается чем-то, что планировщик должен обслуживать, возможно, принимая во внимание решения планировщика о том, сколько времени требуется для выполнения текущих потоков.
Когда поток находится в состоянии ожидания, стресс, который он накладывает на систему, сведен к минимуму, и планировщику не нужно беспокоиться об этом. Он неактивен, пока не получит уведомление.
Вот почему использование notifyAll менее чем идеально, оно вызывает кучу нитей, которые ранее были счастливы бездействовать, не загружая система, чтобы разбудить, где большинство из них будет блокироваться, пока они не смогут получить блокировку, найти условие, которого они ждут, не соответствует действительности, и вернуться к ожиданию. Было бы предпочтительнее уведомлять только те потоки, которые имеют шанс добиться прогресса.
(Использование ReentrantLock вместо встроенных блокировок позволяет вам иметь несколько условий для одной блокировки, так что вы можете удостовериться, что уведомленный поток - это тот, который ждет определенного условия, избегая ошибки с потерянным уведомлением в случай потока, уведомляемый о чем-то, на что он не может действовать.)
namespace test {
class test {
public static void Main() {
System.Console.WriteLine("©");
}
}
}
работы для меня безупречно. Независимо от того, установлена ли консоль на растровые шрифты или Unicode.
, Если Вы хотите произвести Unicode, необходимо установить консольное выходное кодирование на UTF-8 или Unicode.
System.Console.OutputEncoding = System.Text.Encoding.UTF8;
или
System.Console.OutputEncoding = System.Text.Encoding.Unicode;
И если Вы хотите избежать от проблем кодирования исходного кода, необходимо определить точку кода символа непосредственно:
System.Console.WriteLine("\u00a9");
Console.WriteLine("©");
работы для меня...
Или не это вывод, который Вы после?
Можно скопировать его отсюда, если Вам нравится:
В©
(Можно удержать ALT, затем тип 0169, затем выпустить клавишу ALT)
Как насчет удержания ВЫСОКОГО ЗВУКА и ввода 0169 для получения символа авторского права.
static void Main(string[] args)
{
Console.Write("©");
}