Fitting different instances of `LinearSVR` is not thread-safe

### Describe the bug

Found while working on #30041.

See the reproducer below. Fitting `LinearSVR` probably relies on a shared global state in the C++ code and that introduces a race condition when fitting several models concurrently in different threads. As a result, the outcomes are randomly corrupted.

`LinearSVC` does not seem to have the problem (or at least not with its default solver).

### Steps/Code to Reproduce

```python
# %%
import numpy as np
from sklearn.svm import LinearSVR, LinearSVC
from sklearn.datasets import make_regression
import warnings
from sklearn.exceptions import ConvergenceWarning
from joblib import Parallel, delayed


warnings.filterwarnings("ignore", category=ConvergenceWarning)


X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)


C_range = np.logspace(-6, 6, 13)

model_class = LinearSVR
if model_class == LinearSVC:
    y = np.sign(y)  # Convert to binary classification for LinearSVC


sequential_results = [
    model_class(C=C, random_state=0).fit(X, y).coef_.copy() for C in C_range
]


parallel_results = Parallel(n_jobs=4, backend="threading")(
    delayed(lambda C: model_class(C=C, random_state=0).fit(X, y).coef_.copy())(C)
    for C in C_range
)
np.testing.assert_array_equal(
    sequential_results,
    parallel_results,
    err_msg="Parallel and sequential results differ.",
)
```

### Expected Results

Nothing.

### Actual Results

```python

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[22], line 32
     23 sequential_results = [
     24     model_class(C=C, random_state=0).fit(X, y).coef_.copy() for C in C_range
     25 ]
     28 parallel_results = Parallel(n_jobs=4, backend="threading")(
     29     delayed(lambda C: model_class(C=C, random_state=0).fit(X, y).coef_.copy())(C)
     30     for C in C_range
     31 )
---> 32 np.testing.assert_array_equal(
     33     sequential_results,
     34     parallel_results,
     35     err_msg="Parallel and sequential results differ.",
     36 )

    [... skipping hidden 2 frame]

File ~/miniforge3/envs/dev/lib/python3.13/site-packages/numpy/testing/_private/utils.py:921, in assert_array_compare(comparison, x, y, err_msg, verbose, header, precision, equal_nan, equal_inf, strict, names)
    916         err_msg += '\n' + '\n'.join(remarks)
    917         msg = build_err_msg([ox, oy], err_msg,
    918                             verbose=verbose, header=header,
    919                             names=names,
    920                             precision=precision)
--> 921         raise AssertionError(msg)
    922 except ValueError:
    923     import traceback

AssertionError: 
Arrays are not equal
Parallel and sequential results differ.
Mismatched elements: 120 / 260 (46.2%)
Max absolute difference among violations: 0.08899258
Max relative difference among violations: 34.19844827
 ACTUAL: array([[ 1.041988e-05,  3.557394e-05,  1.559387e-05,  7.395653e-06,
         2.093259e-06,  1.044073e-05,  9.847355e-06,  3.642882e-05,
         3.347666e-05,  2.792198e-05, -1.039337e-05,  7.220585e-06,...
 DESIRED: array([[ 1.041988e-05,  3.557394e-05,  1.559387e-05,  7.395653e-06,
         2.093259e-06,  1.044073e-05,  9.847355e-06,  3.642882e-05,
         3.347666e-05,  2.792198e-05, -1.039337e-05,  7.220585e-06,...
```

### Versions

```shell
System:
    python: 3.13.3 | packaged by conda-forge | (main, Apr 14 2025, 20:44:30) [Clang 18.1.8 ]
executable: /Users/ogrisel/miniforge3/envs/dev/bin/python
   machine: macOS-15.5-arm64-arm-64bit-Mach-O

Python dependencies:
      sklearn: 1.8.dev0
          pip: 25.1.1
   setuptools: 75.8.2
        numpy: 2.2.6
        scipy: 1.15.2
       Cython: 3.1.1
       pandas: 2.2.3
   matplotlib: 3.10.3
       joblib: 1.5.1
threadpoolctl: 3.6.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 10
         prefix: libopenblas
       filepath: /Users/ogrisel/miniforge3/envs/dev/lib/libopenblas.0.dylib
        version: 0.3.30
threading_layer: openmp
   architecture: VORTEX

       user_api: openmp
   internal_api: openmp
    num_threads: 10
         prefix: libomp
       filepath: /Users/ogrisel/miniforge3/envs/dev/lib/libomp.dylib
        version: None
```

COMMENT:
Hi, I am interested in solving this :). Could I be assigned?

Labels: Bug