powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Многопоточность и разделяемые ресурсы.
25 сообщений из 72, страница 2 из 3
Многопоточность и разделяемые ресурсы.
    #38606634
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

YUBAКак конкретно это реализовано MS не имеет значения.

МС это реализовало так, что у них всего 1 экземпляр метода в памяти, что вы там выдумали из своего "знания" машинных кодов © я даже представить боюсь
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38606678
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisYUBAОбраз - описание, модель, копия и т.д., достаточное, для полного восстановления объекта и его свойств.
Экземпляр метода - он всегда один в памяти.Понятия не имею, но каждый поток использует только и исключительно свои все переменные определенные в функции, что видно из распечатки вывода.
И как MS это делает, копированием кода всех используемых функций, сохранением копии всех переменных в теле используемых потоком функций на время прерывания, либо переменные создаются в адресном пространстве потока, не ясно. Но нам нужен сам факт сего.
Интересно еще и то, что функция не блокируется (как кто-то сказал), и может не конфликтуя выполняться одновременно несколькими потоками.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38606688
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
Вы вообще представляете что такое функция? интересно было бы услышать ))
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38606697
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAИнтересно еще и то, что функция не блокируется (как кто-то сказал).

Самое интересное, что это ты и скзал, присовоив почему то мне
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38606701
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAДоступ к функции, как правило, и есть доступ к объектам и получение ссылки на объект
это просто вызов кода
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38606711
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisСамое интересное, что это ты и сказал, присвоив почему то мнеЯ не помню кто. :) Ну, пусть я. Без разницы.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38606712
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно, уже флуд пошел. Все уже ясно. Тема исчерпана.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38606725
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAЯ не помню кто. :) Ну, пусть я. Без разницы.
тролль худосочный
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38607885
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
А теперь проведите "натурный" эксперимент вот с таким кодом:
Код: c#
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.
public class A1
    {
        Thread t1;
        Thread t2;
        B1 B10 = new B1();
          
        public A1()
        {
        t1 =new Thread(dt1);
        t2 =new Thread(dt2);
        t1.Start();
        t2.Start();
        }
        
        void dt1()
        {
            Double x = 2, y = 2;
            Debug.WriteLine("Поток t1", "2+2=");
            Debug.WriteLine(B10.f(ref x,ref y,220), "2+2=");
        }
        
        void dt2()
        {
            for(int i=0; i<5; i++)
            {
                Double x=3,  y=3;
                Debug.WriteLine("Поток t2", "3+3=");
                Debug.WriteLine(B10.f(ref x, ref y, 50), "3+3=");
            }

        }
  }

  
class B1
    {

        private double a, b;
        private double c;

        public B1()
        { }

        public double f(ref double x, ref double  y, int z)
        {
            Debug.WriteLine(Thread.CurrentTread.ManagedThreadId, "Вычисления");
            a = x; b = y;
            c = a + b;

            String s = x + "" + y + " " + z + " " + c;

            Debug.WriteLine(Thread.CurrentTread.ManagedThreadId, z, "Задержка");
            Thread.Sleep(z);
            Debug.WriteLine(Thread.CurrentTread.ManagedThreadId, s);

            s = a + "" + b + " " + z + " " + c;
            Debug.WriteLine(Thread.CurrentTread.ManagedThreadId, s);

            return a + b +c+x+y;
        }
   }

...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38607934
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
а ещё лучше выполнить вот этот код...
Код: c#
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.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A1 a1 = new A1();
            a1.RunTest();
            Console.ReadLine();
        }
    }
    public class A1
    {
        Thread t1;
        Thread t2;
        B1 B10 = new B1();

        public A1()
        {
        }
        public void RunTest()
        {
            t1 = new Thread(dt1);
            t2 = new Thread(dt2);
            t1.Start();
            t2.Start();
        }

        void dt1()
        {
            Double x1 = 2, y1 = 2;
            Console.WriteLine("Поток t1 ({0}) идентификатор {1}", "2+2=", Thread.CurrentThread.ManagedThreadId);
            Console.WriteLine("t1 Результат {0}: 2+2= {1}", Thread.CurrentThread.ManagedThreadId, B10.f(ref x1, ref y1, 200));
            Console.WriteLine("Поток t1 завершен");
        }

        void dt2()
        {
            Console.WriteLine("Поток t2 {0} идентификатор {1}", "3+3=", Thread.CurrentThread.ManagedThreadId);
            Double x2 = 3, y2 = 3;
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("t2 Итерация {0}",(i+1));
                Console.WriteLine("t2 Результат {0}: 3+3= {1}", Thread.CurrentThread.ManagedThreadId, B10.f(ref x2, ref y2, 30));
            }
            Console.WriteLine("Поток t2 завершен");
            Console.WriteLine();
        }
    }


    class B1
    {

        private static double a = 0, b = 0; // < - Вот они грабли
        private static double c = 0;  // < - Вот они грабли

        public B1()
        { }

        public double f(ref double x, ref double y, int z)
        {
            Console.WriteLine("Thread ID ({0}) - Вход в f1 --------------", Thread.CurrentThread.ManagedThreadId);
            a = x; b = y;
            c = a + b;

            String s = String.Format("x = {0}, y = {1}, a = {2}, b = {3}, c = {4}", new Object[] { x, y, a, b, c });

            Console.WriteLine("Thread ID ({0}) - переменные до задержки: {1}", Thread.CurrentThread.ManagedThreadId, s);

            Console.WriteLine("Thread ID ({0}) - Задержка {1}", Thread.CurrentThread.ManagedThreadId, z);
            Thread.Sleep(z);

            s = String.Format("x = {0}, y = {1}, a = {2}, b = {3}, c = {4}", new Object[]{x,y,a,b,c});
            Console.WriteLine("Thread ID ({0}) - переменные после задержки: {1}", Thread.CurrentThread.ManagedThreadId, s);
            Console.WriteLine("Thread ID ({0}) - Выход из f1 --------------", Thread.CurrentThread.ManagedThreadId);
            return a + b + c + x + y;
        }
    }
}

...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38607984
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

ну и уже совсем для вкусности...
Код: c#
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.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A1 a1 = new A1();
            a1.RunTest();
            Console.ReadLine();
        }
    }
    public class A1
    {
        Thread t1;
        Thread t2;
        B1 B10 = new B1();

        public A1()
        {
        }
        public void RunTest()
        {
            Console.WriteLine("Выполнение в основном потоке:");
            dt1_1();
            dt2_1();
            Console.WriteLine();
            Console.WriteLine("Выполнение в разных потоках:");
            t1 = new Thread(dt1);
            t2 = new Thread(dt2);
            t1.Start();
            t2.Start();
        }

        void dt1()
        {
            Console.WriteLine("Поток t1 ({0}) идентификатор {1}", "2+2=", Thread.CurrentThread.ManagedThreadId);
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("t1 Итерация {0}", (i + 1));
                dt1_1();
            }
            Console.WriteLine("Поток t1 завершен");
        }

        private void dt1_1()
        {
            Double x1 = 2, y1 = 2;
            Console.WriteLine("t1 Результат {0}: 2+2= {1}", Thread.CurrentThread.ManagedThreadId, B10.f(ref x1, ref y1, 70));
        }

        void dt2()
        {
            Console.WriteLine("Поток t2 {0} идентификатор {1}", "3+3=", Thread.CurrentThread.ManagedThreadId);
            //Double x2 = 3, y2 = 3;
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("t2 Итерация {0}",(i+1));
                dt2_1();
            }
            Console.WriteLine("Поток t2 завершен");
            Console.WriteLine();
        }
        void dt2_1()
        {
            Double x2 = 3, y2 = 3;
            Console.WriteLine("t2 Результат {0}: 3+3= {1}", Thread.CurrentThread.ManagedThreadId, B10.f(ref x2, ref y2, 30));
        }
    }


    class B1
    {

        // Они даже и не статичные, но всё равно засадонистые
        private double a = 0, b = 0; 
        private double c = 0;

        public B1()
        { }

        public double f(ref double x, ref double y, int z)
        {
            Console.WriteLine("Thread ID ({0}) - Вход в f1 --------------", Thread.CurrentThread.ManagedThreadId);
            a = x; b = y;
            c = a + b;

            String s = String.Format("x = {0}, y = {1}, a = {2}, b = {3}, c = {4}", new Object[] { x, y, a, b, c });

            Console.WriteLine("Thread ID ({0}) - переменные до задержки: {1}", Thread.CurrentThread.ManagedThreadId, s);

            Console.WriteLine("Thread ID ({0}) - Задержка {1}", Thread.CurrentThread.ManagedThreadId, z);
            Thread.Sleep(z);

            s = String.Format("x = {0}, y = {1}, a = {2}, b = {3}, c = {4}", new Object[]{x,y,a,b,c});
            Console.WriteLine("Thread ID ({0}) - переменные после задержки: {1}", Thread.CurrentThread.ManagedThreadId, s);
            Console.WriteLine("Thread ID ({0}) - Выход из f1 --------------", Thread.CurrentThread.ManagedThreadId);
            return a + b + c + x + y;
        }
    }
}


и результат "вкусности"
Код: 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.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
Выполнение в основном потоке:
Thread ID (1) - Вход в f1 --------------
Thread ID (1) - переменные до задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (1) - Задержка 70
Thread ID (1) - переменные после задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (1) - Выход из f1 --------------
t1 Результат 1: 2+2= 12 <- Это то к чему мы стремимся
Thread ID (1) - Вход в f1 --------------
Thread ID (1) - переменные до задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (1) - Задержка 30
Thread ID (1) - переменные после задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (1) - Выход из f1 --------------
t2 Результат 1: 3+3= 18 <- Это то к чему мы стремимся

Выполнение в разных потоках:
Поток t1 (2+2=) идентификатор 3
t1 Итерация 1
Thread ID (3) - Вход в f1 --------------
Thread ID (3) - переменные до задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Задержка 70
Поток t2 3+3= идентификатор 4
t2 Итерация 1
Thread ID (4) - Вход в f1 --------------
Thread ID (4) - переменные до задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Задержка 30
Thread ID (4) - переменные после задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Выход из f1 --------------
t2 Результат 4: 3+3= 18 <-Пока что нормально
t2 Итерация 2
Thread ID (4) - Вход в f1 --------------
Thread ID (4) - переменные до задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Задержка 30
Thread ID (4) - переменные после задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Выход из f1 --------------
t2 Результат 4: 3+3= 18 <-И второй раз нормально
t2 Итерация 3
Thread ID (4) - Вход в f1 --------------
Thread ID (4) - переменные до задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Задержка 30
Thread ID (3) - переменные после задержки: x = 2, y = 2, a = 3, b = 3, c = 6
Thread ID (3) - Выход из f1 --------------
t1 Результат 3: 2+2= 16 <-Оппаньки, а это что за хрень? См. причину выше
t1 Итерация 2
Thread ID (3) - Вход в f1 --------------
Thread ID (3) - переменные до задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Задержка 70
Thread ID (4) - переменные после задержки: x = 3, y = 3, a = 2, b = 2, c = 4
Thread ID (4) - Выход из f1 --------------
t2 Результат 4: 3+3= 14 <-Опять хрень
t2 Итерация 4
Thread ID (4) - Вход в f1 --------------
Thread ID (4) - переменные до задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Задержка 30
Thread ID (4) - переменные после задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Выход из f1 --------------
t2 Результат 4: 3+3= 18 <-Исправились вроде как
t2 Итерация 5
Thread ID (4) - Вход в f1 --------------
Thread ID (4) - переменные до задержки: x = 3, y = 3, a = 3, b = 3, c = 6
Thread ID (4) - Задержка 30
Thread ID (3) - переменные после задержки: x = 2, y = 2, a = 3, b = 3, c = 6
Thread ID (3) - Выход из f1 --------------
t1 Результат 3: 2+2= 16 <-И опять непонятки
t1 Итерация 3
Thread ID (3) - Вход в f1 --------------
Thread ID (3) - переменные до задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Задержка 70
Thread ID (4) - переменные после задержки: x = 3, y = 3, a = 2, b = 2, c = 4
Thread ID (4) - Выход из f1 --------------
t2 Результат 4: 3+3= 14 <- И снова хрень
Поток t2 завершен

Thread ID (3) - переменные после задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Выход из f1 --------------
t1 Результат 3: 2+2= 12 <-Нормально
t1 Итерация 4
Thread ID (3) - Вход в f1 --------------
Thread ID (3) - переменные до задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Задержка 70
Thread ID (3) - переменные после задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Выход из f1 --------------
t1 Результат 3: 2+2= 12 <-Нормально
t1 Итерация 5
Thread ID (3) - Вход в f1 --------------
Thread ID (3) - переменные до задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Задержка 70
Thread ID (3) - переменные после задержки: x = 2, y = 2, a = 2, b = 2, c = 4
Thread ID (3) - Выход из f1 --------------
t1 Результат 3: 2+2= 12 <-Нормально
Поток t1 завершен
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38608870
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov, да, спасибо.
Ну, от переменных класса ничего другого ожидать и не приходится. Эт понятно.
Меня Рихтер сильно заморочил - вот этим:
РихтерВ то же время FCL не гарантирует безопасности в отношении потоков
экземплярным методам, так как введение в них запирающего кода слишком
сильно сказывается на производительности. У него еще есть рассуждения на эту тему. Там ни слова о переменных класса. Передача в функцию по ссылке или значению здесь тоже ни с какого бока.
Что он подразумевает под отсутствием "гарантии безопасности в отношении потоков" именно "экземплярным методам", так и не понял.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38608977
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAЧто он подразумевает под отсутствием "гарантии безопасности в отношении потоков" именно "экземплярным методам", так и не понял.

Ну это скорее товарищь Рихтер не понял, что нужно обьяснять, что подобная опасность касается только общих ресурсов, а не переменных в области видимости конкретной функции....
:-)
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609028
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129, с общими ресурсами я решил просто, без всяких "запираний-отпираний".
Данные, порожденные потоками, имеют временную метку, и измениться уже не могут. Другие потоки обращаются только к последней временной метке или более ранним. Все асинхронно.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609041
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
гыгы
авторДанные, порожденные потоками, имеют временную метку, и измениться уже не могут. Другие потоки обращаются только к последней временной метке или более ранним. Все асинхронно.
что только не придумают русские, лишь бы не строить дороги..))))))))
зы я надеюсь это не в production ( так риторически)
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609045
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиУзбагойтесь, вернитесь к истокам : организация памяти, коль затронули функции - почитайте про стек вызовов (call stack)
((

В качестве ликбеза поясни пожалуйста: почему аргументы вызова пушатся в стек раньше точки возврата в функцию вызова (ведь они попнутся в итоге позже, чем точка возврата, а должно быть наоборот по идее), и в какой момент в стек пушатся локальные переменные, и когда и кем они попаются оттуда.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609058
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиYUBA,
гыгы
что только не придумают русские, лишь бы не строить дороги..))))))))
зы я надеюсь это не в production ( так риторически)
Послушайте, Гыгы, вы когда нибудь вообще что-либо читали, кроме программирования?
Или только "делать умный вид и надувать щеки"(с) ?
В этом подходе ничего нового, применяется с момента рождения цифровой обработки.
Так, кстати, я вообще не программист, и программирование для меня не более, чем вспомогательный инструмент.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609071
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,
аргуметны пишутся раньше перед вызовом call, просто перед ними идет переворот стека, не понял про локальные
пишет хозяин кода, если это аргументы снаружи, там возможно укладка двух первых в регистр процессора минуя память
( обсуждали тут вроде)
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609082
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAТак, кстати, я вообще не программист, и программирование для меня не более, чем вспомогательный инструмент.
А почему тогда возмущаетесь удивлением профессиональных программистов непрофессиональному решению?


YUBAДругие потоки обращаются только к последней временной метке или более ранним
Вы учитываете, что тут тоже скорее всего будут нужны "отпирания/запирания"?

Вероятно, если вы приведете пример РЕАЛЬНОЙ задачи, которую решаете, а не какие-то синтетические варианты, вам помогут более конкретно
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609085
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAAlex Kuznetsov, да, спасибо.
Ну, от переменных класса ничего другого ожидать и не приходится. Эт понятно.
Меня Рихтер сильно заморочил - вот этим:
РихтерВ то же время FCL не гарантирует безопасности в отношении потоков
экземплярным методам, так как введение в них запирающего кода слишком
сильно сказывается на производительности. У него еще есть рассуждения на эту тему. Там ни слова о переменных класса. Передача в функцию по ссылке или значению здесь тоже ни с какого бока.
Что он подразумевает под отсутствием "гарантии безопасности в отношении потоков" именно "экземплярным методам", так и не понял.Я считаю, что мой пример показывает именно то, что Рихтер и имел в виду.
Методы экземпляра могут как работать с переменными класса, "внешними" по отношению к ним(методам), так и не работать с ними.
Отсюда и нет гарантии безопасности без использования блокировок.
Использование-же блокировок замедляет работу методов в силу вынужденного простоя во время ожидания снятия блокировки.
По моему всё достаточно логично и понятно.
Я считаю, что лучше в данном случае прибегнуть к Бритве Оккама и по возможности отказаться от использования разделяемых ресурсов, т.е. "внешних" по отношению к методу экземпляра переменных, при работе в многопоточной среде, дабы не замедлять работу блокировками.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609088
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи просто перед ними идет переворот стека,
O.O это что за чудо-операция такая?

не понял про локальные


Ну пишут в Вики, что стек может использоваться для хранения локальных переменных - только не пишут как и зачем (разве что при рекурсии?)
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609110
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,
аргументы идут раньше вызова, после вызова происходит проброс результата в локальную переменную, ну может быть тут действительно не уместно переворот (stloc.0),
вот про рекурсию не скажу, как бы логично разматывать стек без видимых локальных переменных
но проброс всеравно скорее будет чисто техническии ?
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609117
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
да не прибедняйтесь, я то же уже пол года, и не собираюсь пока , скучно и не интересно.
лучше бездельничать и лазить по спортзалам ))
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609120
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79YUBAДругие потоки обращаются только к последней временной метке или более ранним
Вы учитываете, что тут тоже скорее всего будут нужны "отпирания/запирания"?
Для чего? Все данные записываются в строки таблиц DataTable c ключевым полем [DateTime]. Выборка по View.RowFilter="DateTime <= '" + T + "'". Данные в строке больше не меняются. При готовности новых данных пишутся новые строки в таблицы с другим Т. Производящий поток сам решает какое время Т(n+1) >T(n) ему указать. А др потоки, какое время выбрать из <=Tn для обработки. Если нужных данных >T нет, ждем.

Arm79Вероятно, если вы приведете пример РЕАЛЬНОЙ задачи, которую решаете, а не какие-то синтетические варианты, вам помогут более конкретноСпасибо, вопросов пока нет. Разве по методу Update, но это др. тема, и пока не к спеху.
...
Рейтинг: 0 / 0
Многопоточность и разделяемые ресурсы.
    #38609128
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
а Вы с datatable без запираний работаете из потоков?
...
Рейтинг: 0 / 0
25 сообщений из 72, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Многопоточность и разделяемые ресурсы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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