powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / lock-free модели
10 сообщений из 10, страница 1 из 1
lock-free модели
    #39378943
зеленый админ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пртвет! Знакомлюсь с lock-free моделями, наваял тут для себя, но не могу себе объяснить, будет ли оно всегда работать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
#include <QCoreApplication>
#include <mutex>
#include <thread>
#include <vector>
#include <fstream>
#include <iostream>
#include <atomic>

static std::atomic<unsigned int> nLatestProcessed = {0};
static const unsigned int nMaxToProcess = 200;
static const unsigned int nMaxRoot = 4000000000;
//std::mutex mInt;
std::mutex mOutput;

unsigned int IncreaseLatestNum()
{
  //std::lock_guard<std::mutex> lk(mInt);
  return nLatestProcessed.fetch_add(1, std::memory_order_relaxed);
}

void ProcessNumber()
{
  unsigned int ToProcess;
  unsigned long long x;
  unsigned long long y;
  unsigned long long z;

  do {
    ToProcess = IncreaseLatestNum();
    if (ToProcess >= nMaxToProcess) {
        break;
    }
    z = sqrt(ToProcess);
    if (z*z == ToProcess) {
        continue;
    }
    for (x = 1; x < nMaxRoot; ++x) {
        y = x*x*ToProcess + 1;
        z = sqrt(y);
        if (z*z == y) {
          std::lock_guard<std::mutex> lk(mOutput);
          std::cout << std::this_thread::get_id() << ": " << ToProcess << ": (" << z << ", " << x << ")" << std::endl;
          break;
        }
    }
    if (x == nMaxRoot) {
        std::lock_guard<std::mutex> lk(mOutput);
        std::cout << std::this_thread::get_id() << ": " << ToProcess << ": (none, none)" << std::endl;
        break;
    }
  }
  while (true);
}

int main(int argc, char *argv[])
{
    std::vector<std::thread> v;

    QCoreApplication a(argc, argv);

    for (unsigned int var = 0; var < std::thread::hardware_concurrency(); ++var) {
      v.push_back(std::thread(ProcessNumber));
    }

    std::for_each(v.begin(),v.end(), std::mem_fn(&std::thread::join));

    std::cout << "done" << std::endl;
    return a.exec();
}



Интересует атомарка nLatestProcessed: обойдут ли все потоки все значения до 200 ровно по разу?
...
Рейтинг: 0 / 0
lock-free модели
    #39378946
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зеленый админИнтересует атомарка nLatestProcessed: обойдут ли все потоки все значения до 200 ровно по разу?
Каждое значение от 0 до 199 будет обработано по одному разу.
...
Рейтинг: 0 / 0
lock-free модели
    #39378948
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
  unsigned int ToProcess;
  unsigned long long x;


Чтобы много букав не писать можно так
Код: plaintext
1.
2.
3.
4.
#define <stdint.h>
...
  uint32_t ToProcess;
  uint64_t x;
...
Рейтинг: 0 / 0
lock-free модели
    #39378954
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зеленый админПртвет! Знакомлюсь с lock-free моделями, наваял тут для себя, но не могу себе объяснить, будет ли оно всегда работать:

Коллеги. Я не понимаю - какой смысл ваять "что-то" без пояснения и спрашивать потом - "будет-ли оно работать" ?

Если вы опирались на tutorial или какой-то пример из книги - то опубликуйте.

Если вы на 100% являетесь автором кода - то НАМ имеет смысл подвергать сомнению
каждую строчку ВАШЕГО кода начиная с самой первой и даже сомневаться в полезном эффекте.

У вашего приложения есть полезный эффект? Что оно делает?
...
Рейтинг: 0 / 0
lock-free модели
    #39378957
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, в коде полезных 4-5 строк, остальное шлак. Но когда учишься нельзя написать без шлака. Главное что вопрос он поставил корректно. ИМХУ все нормально, протри свой хрустальный шар :)
...
Рейтинг: 0 / 0
lock-free модели
    #39378958
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, даже в своих tutorials я всегда старался искать смысл или решать известную задачу.
Хотя-бы гонять лошадь по шахматной доске.

Ведь не нужно много ума чтобы взять известные олимпиадные задачи и развернуть их
в API мультипоточности или параллелизма?
...
Рейтинг: 0 / 0
lock-free модели
    #39378963
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima T, даже в своих tutorials я всегда старался искать смысл или решать известную задачу.
Хотя-бы гонять лошадь по шахматной доске.

Ведь не нужно много ума чтобы взять известные олимпиадные задачи и развернуть их
в API мультипоточности или параллелизма?
Тут нет заумностей, просто слова типа "lock-free" не в тему упомянуты. По простому вопрос ТС звучит так: правда что IncreaseLatestNum() каждый раз вернет уникальное значение при вызове ее из любого потока. Да, правда.
...
Рейтинг: 0 / 0
lock-free модели
    #39379024
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПо простому вопрос ТС звучит так: правда что IncreaseLatestNum() каждый раз вернет уникальное значение при вызове ее из любого потока. Да, правда.
Ну слава богу.

ТС мог-бы просто спросить это без тонны кода.
...
Рейтинг: 0 / 0
lock-free модели
    #39379487
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TПо простому вопрос ТС звучит так: правда что IncreaseLatestNum() каждый раз вернет уникальное значение при вызове ее из любого потока. Да, правда.
Ну слава богу.

ТС мог-бы просто спросить это без тонны кода.
Топик-то интересный. Особенно если ТС дойдет до более сложных "моделей". Например очередь.
...
Рейтинг: 0 / 0
lock-free модели
    #39379489
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcОсобенно если ТС дойдет до более сложных "моделей". Например очередь.
На хабре есть ряд статей про lock-free, в т.ч. про очереди. Думаю ТСу не помешает их почитать.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / lock-free модели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]