DartNyan: Ах, и учтите, что неточность операций над числами с плавающей точкой всё равно не даст вам получить бесконечность, так как прибавляемое число в какой-то момент станет меньше эпсилон.
DartNyan: А здесь у вас количества итераций в сумме не хватает. Чем ближе к граничным значениям, тем медленнее сумма подбирается к значению левой части.
> Единственное спорное «средство синхронизации» — в потоке 1 дождаться завершения потока 2.
Технически его можно ожидать и в main(), на пару со вторым. Тогда придётся создавать в мэйне пустой поток, передавать ссылку на него в поток1 и присваивать ему новый поток.
Не гарантировано чередование. Один поток может захватить мутекс два раза подряд. Можно тупо вставить 100мс ожидания после освобождения мутекса, тогда будет работать как надо в 99.99% случаев.
jcmvbkbc: >У вас слева и справа от "вместо" записано одинаковое значение.
Спасибо. Плюсик справа приколочен на один гвоздь и случайно повернулся на 45 градусов.
Да, до промежуточного представления, без явного указания команд компилятору, не добраться. Я просто понял предыдущий пост как "GCC не использует промежуточное представление".
В противном случае пришлось бы делать <кол-во яыков> × <кол-во платформ> трансляторов, вместо текущего <кол-во яыков> × <кол-во платформ>.
Транслирование из представления в ассемблер а затем сборка это для ускорения разработки транслятора под новую платформу: можно взять готовый ассемблер и не городить велосипедов.
Я подозреваю, что что-то не так в реализации somethread: если join() вызывает join() хранящегося std::thread, то выполнение будет заблокировано пока поток не завершится.
> Но возможно есть какие то штатные std::* средства, которые позволяют это делать.
Чтобы ждать, пока std::thread не завершил работу, нужно сделать join(). Возможно вы что-то делаете не так. Создайте минимальный рабочий пример показывающий проблему, без ненужного кода и запостите ссылку на онлайн компилятор с этим кодом.
kloppspb: >А вот мой g++, например, его не находит
Ваш g++ работает неправильно. Стандарт С++ гарантирует:
1) Все заголовочные файлы С ( name.h ) доступны в С++ (и дополнительно доступны файлы ( cname ) с некоторыми отличиями )
2) Если при попытке включить файл при помощи #include "name" файл не обнаружен, поиск повторяется как если бы было написано #include < name >
Олег Цилюрик: >макросы в C++ на практике никто практически не использует
>для этого гораздо более мощный механизм template
Превращение аргумента в строку или склеивание двух аргументов возможно сделать только с помощью макросов. BOOST_TTI_*, например это часть boost::type_traits, которая не вошла в стандарт, но очень часто используется. Как и boost::preprocessor.
> Но вопрос был задан про C:
> #include "stdio.h"
Совершенно внезапно этот заголовочный файл существует и в С++.